解题思路:需要找到相关规律,涉及到集合问题
参考代码:#include
#include
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
{
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;
}