人生亦梦


私信TA

用户名:uq_55161405400

访问量:8861

签 名:

追寻强大且简洁的算法解疑,不会有难题,因而我为此痴迷

等  级
排  名 3060
经  验 2049
参赛次数 1
文章发表 25
年  龄 0
在职情况 学生
学  校
专  业 网络空间安全

  自我简介:

菜,并痴迷着; 爱,并奋斗着

解题思路:

注意事项:

参考代码:

/*给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,

例如,当k=3时,这个序列是:


1,3,4,9,10,12,13,…


观察数列,知3的i次方(i={0,1,2...})后面的数(直到3的i+1次方)为该项分别与前面的数的和。如3的2次方后的3个数(3次方前),分别为 


9+1 9+3 9+4  3的3次方后的数为 27+1 27+3 27+4 27+9 27+10 27+12 27+13 依次类推即发现规律。



例如,对于k=3,N=100,正确答案应该是981。*/


#include<stdio.h>


int pow(int k,int x);          //求k的x次幂

int arr[1000];                   //不得超过1000项

/************************************************************/

int main ()

{    

int k;                           //底数

int n;                          //输出第n个数

int num=0;                //数列的项数

int ki;                         //辅助变量

int x=0;                     //k的x次幂,每for循环一次加1

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

           arr[num++]=1;    //初始化第一个数

   while (num<n+2)        //出现所所需项数就退出循环

   {

              ki=num;

            //按规律增加

   for(int i=0;i<ki-1;i++)    //此处实现当前幂次数循环加前面每一项

   arr[num++]=arr[ki-1]+arr[i];

   

   x++;

   arr[num++]=pow(k,x);

   }

   printf ("%d",arr[n-1]);

return 0;

}

/************************************************************/

int pow(int k,int x)

{

int sum=1;

for (int i=0;i<x;i++)

{

sum*=k;

}

return sum;

 } 


 

0.0分

13 人评分

  评论区

  • «
  • »