解题思路:需要找到相关规律,涉及到集合问题

参考代码:

#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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论