原题链接:数列
解题思路:需要找到相关规律,涉及到集合问题
参考代码:
#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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复