LiaoChienL


私信TA

用户名:LiaoChienL

访问量:1058

签 名:

等  级
排  名 54508
经  验 256
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 北科大
专  业

  自我简介:

解题思路:

3^0

3^1  3^0+3^1

3^2  3^0+3^2  3^1+3^2  3^0+3^1+3^2

以此类推,发现规律为:比如第三行第三个数是第三行的开头3^2加上第二行的第一个数3^1,第三行第四个数是第三行的开头3^2加上第二行第二个数3^0+3^1,由此想到使用递推填充数组后直接输出答案。


注意事项:

参考代码:

#include<stdio.h>


long long int f(int k,int i){//一个简单的k次方函数

    long long int last=1;

    for(int j=1;j<=i;j++){

        last=last*k;

    }

    return last;

}


int main()

{

    int k,N,max1,max2=0,i;

    long long int n[1001]={0};

    scanf("%d %d",&k,&N);

    

    for(i=1;i<=1000;i++){//循环来使用递推向数组充填数值

        

        if(i==f(2,max2)){//判断当在每行第一个位置且未超出范围时

            

            n[i]=f(k,max2);

            max1=n[i];  //max1 max2 起到标记位置的作用

            max2++;

        }

        

        else n[i]=max1+n[i-f(2,max2-1)];//数列的规律,每行的非第一个位置应该填的数,max1为该行第一个数,n[i-f(2,max2-1)]为前面的数

    }

    

    printf("%lld",n[N]);

    


return 0;

    

}


 

0.0分

3 人评分

  评论区

俺表示完全看不懂
2021-11-27 17:58:14
大佬这道题能不能用递归做啊……
2019-06-13 22:04:52
  • «
  • 1
  • »