数论-北大-2081

3 views
Skip to first unread message

china_sjc

unread,
Aug 6, 2008, 5:42:33 AM8/6/08
to 中国矿业大学徐海学院算法课程
#include<stdio.h>
int a[500001];bool b[3012502];
int main(){int i,j,t,n;a[0]=0;for(i=1;i<=500000;i++){t=a[i-1]-
i;if(t>0&&!b[t]){b[t]=1;a[i]=t;}else
{a[i]=a[i-1]+i;b[a[i]]=1;}}while(scanf("%d",&n),n!=-1)printf("%d
\n",a[n]);}

china_sjc

unread,
Aug 6, 2008, 11:28:46 PM8/6/08
to 中国矿业大学徐海学院算法课程
题意:
这样一个数列:a(0) = 0 ; a(m) = a(m-1) - m (若结果为正,且不在已有数列中),否则 a(m) = a(m-1)
+ m.
比如:0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9 ...

给你k值,请计算a(k)。
0<=k<=500000.

china_sjc

unread,
Aug 6, 2008, 11:36:52 PM8/6/08
to 中国矿业大学徐海学院算法课程
#include<stdio.h>
int a[500001];
bool b[3012502];
int main(){
int i,t,n;
a[0]=0;
for(i=1;i<=500000;i++)
{
t=a[i-1]- i;
if(t>0&&!b[t])
{
b[t]=1;a[i]=t;
}
else
{
a[i]=a[i-1]+i;
b[a[i]]=1;
}
}
while(scanf("%d",&n),n!=-1)
printf("%d \n",a[n]);
return 0;
}
Reply all
Reply to author
Forward
0 new messages