原题链接:数列
解题思路:需要找到相关规律,涉及到集合问题
参考代码:
#include <stdio.h>
#include <math.h>
int a[1000];
int ipow(int k,int i)
{
int j,res=1;
for(j=1;j<=i;j++)
res *=k;
return res;
}
int lg2(int n)
{
if(n==1) return 0;
int m=1,mul=2;
while(n>mul)
{
mul*=2;
m++;
}
return m;
}
int main()
{
int k,n;
scanf("%d %d",&k,&n);
int i,j,t,m,lim,tmp,tmp1;
m=lg2(n+1)-1;
i=0;lim=-1;
for(j=0;j<=m;j++)
{
tmp=ipow(2,j);
tmp1=ipow(k,j);
//printf("tmp值为:%d\n",tmp);
lim =lim+tmp;
//printf("lim值为:%d\n",lim);
i++;
t=0;
while((i<=lim)&&(i<n))
{
a[i++]=a[t++]+tmp1;
//printf("a[%d]的值被赋为:%d\n",(i-1),a[i-1]);
}
a[lim-tmp+1]=tmp1; //printf("该段的初值a[%d]的值为:%d\n",lim-tmp+1,a[lim-tmp+1]);
}
printf("%d",a[n-1]);
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复