#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[500001],b[3020000]={0},i;
int n;
while(scanf("%d",&n)&&n!=-1)
{ a[0]=0;
b[0]=1;
for(i=1;i<=300000;i++)
{
if(a[i-1]-i>0&&b[a[i-1]-i]!=1)
{
a[i]=a[i-1]-i;
b[a[i]]=1;
}
else
{
a[i]=a[i-1]+i;
b[a[i]]=1;
}
}
}
printf("%d\n",a[n]);
system("pause");
return 0;
}
对比两个程序1.在做公式计算的时候先把公式给表达出来 一般测试数据都很多 考虑几个数据做while就完了反而会使得运算量更大,耗时更多
2,在线性里面用另外一个数组来标记时,记得初始化,怎么初始化上面有。
3.就算程序2把while拿下来也不行,还值得深究,暂定为2比1复杂一点。
哈哈!!!终于解除疑惑了...数组开在main函数之外的话,用的是整个程序的空间,开在里面是用的栈的空间,
所以,以后开大数组的时候记得放在外面,全局变量。