poj的2081题我可以过数据,但是交上去就是wa,求大牛指教
#include<stdio.h>#include<algorithm>#include<cstring>usingnamespacestd;boolnum[500001...
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
bool num[500001]={0};
int main()
{
int a[500000]={0};
int k;
num[0]=1;
for (int i=1;i<500000;i++)
{
a[i]=a[i-1]-i;
if(a[i]<=0||(a[i]<=500000&&num[a[i]]!=0)){
a[i]=a[i-1]+i;
}
if (a[i]<=500000)num[a[i]]=1;
}
while(scanf("%d",&k)!=EOF&&(k+1))
{
printf("%d\n",a[k]);
}
return 0;
} 展开
#include<algorithm>
#include<cstring>
using namespace std;
bool num[500001]={0};
int main()
{
int a[500000]={0};
int k;
num[0]=1;
for (int i=1;i<500000;i++)
{
a[i]=a[i-1]-i;
if(a[i]<=0||(a[i]<=500000&&num[a[i]]!=0)){
a[i]=a[i-1]+i;
}
if (a[i]<=500000)num[a[i]]=1;
}
while(scanf("%d",&k)!=EOF&&(k+1))
{
printf("%d\n",a[k]);
}
return 0;
} 展开
2015-07-20
展开全部
首先我不明白你为什么会有数据?
如果你指的是poj给出的样例数据的话,这又不代表是最终过的测试数据。
你的程序的错误之处就是在标记num[a[i]]的时候,多判断了a[i]<=500000。也就是说,在运算的时候,a[i]可能大于500000,而且你仍需要标记。
最简单的改法是你把程序里的两个a[i]<=500000的条件都删掉,然后把num数组开到10000000左右。
这样就能AC了,但是还有一个细节最好也注意一下:最好把循环终值处定位500000,然后a数组多开至少一位。因为现在你的程序没有计算a[500000]值(虽然poj的数据里没有这个值)
如果你指的是poj给出的样例数据的话,这又不代表是最终过的测试数据。
你的程序的错误之处就是在标记num[a[i]]的时候,多判断了a[i]<=500000。也就是说,在运算的时候,a[i]可能大于500000,而且你仍需要标记。
最简单的改法是你把程序里的两个a[i]<=500000的条件都删掉,然后把num数组开到10000000左右。
这样就能AC了,但是还有一个细节最好也注意一下:最好把循环终值处定位500000,然后a数组多开至少一位。因为现在你的程序没有计算a[500000]值(虽然poj的数据里没有这个值)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询