回 帖 发 新 帖 刷新版面

主题:[讨论]一道竞赛题,求助!!!

序列a(1),a(2),…,a(n)。对于i>1,a(i)是满足下面2个性质的最小正整数:
  (1) a(i) > a(i-1);
  (2) a(i) 的各位数字的和与K×a(i-1)的各位数字的和相等。

例如,a1=1,k=2,n=6时,该序列的前6个元素是1,2,4,8,16,23。

现给定a1,k,n的值,计算该序列的第n项a(n)的值。
a1,k,n (0<k,n<300000)。


求牛人给出高效算法,最好有源代码,不胜感激,[em18]

回复列表 (共3个回复)

沙发

求作业的吧

板凳

#include <stdio.h>
int ad(int b){
    int a[10],i=0,k=0,m=0;
    while(b>=1){
        a[i]=b%10;
        b=b/10;
        i++;k++;
    }
    for(i=0;i<k;i++)
        m+=a[i];
    return(m);
}    
main(){
    int a[300],i,j,m,n,k;
    scanf("%d %d %d",&a[1],&k,&n);
    printf("%d\n",a[1]);
    for(i=2;i<=n;i++){
        for(j=a[1]+1;;j++){
            m=ad(j);
            if((j-a[i-1])>0&&ad(m==ad(k*a[i-1]))){
                a[i]=j;
                printf("%d\n",a[i]);
                break;
            }    
        }
    }
}

3 楼

这样是不行的。。。
因为,0<k, n <3000000
要用高精度运算....

我来回复

您尚未登录,请登录后再回复。点此登录或注册