西南交大acm1001 题,VS2008验证正确,为什么OJ执行结果错误

题目链接http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1001
这是我的代码~提交时选的G++
#include<iostream>
using namespace std;
bool dete(int i){
bool de=true;
for(int k=2;k<i;k++)
{
if(i%k==0)
{
de=false;
break;
}
}
return de;
}
int main()
{
int N,C,count=1;
int *pr;
cin>>N;
cin>>C;
pr=new int[N];
pr[0]=1;
for(int j=2;j<=N;j++)
{
if(dete(j)==true)
{pr[count]=j;
count++;}
}
cout<<N<<" "<<C<<": ";
if((2*C-1)>count)
for(int j=0;j<count;j++)
cout<<pr[j]<<" ";
else if(count%2==0)
for(int j=count/2-C;j<=count/2+C-1;j++)
cout<<pr[j]<<" ";
else
for(int j=(count-1)/2-C+1;j<=(count-1)/2+C-1;j++)
cout<<pr[j]<<" ";
return 0;
}

第1个回答  2011-03-06
edwardvsnc 1001 Wrong Answer G++
我交了一下,说是wrong answer 说明你的程序有问题
他有一些数据通过你的程序得到了错误的结果,说明你的程序在一些地方有问题。
你可以看看边界数据有没有问题,比如说 1, 0, 10000什么的
第2个回答  2011-03-05
#include<iostream>
int pnum[1001]={0},prime[1001],pn;
bool isprime(int x){
int i;
for(i=2;i*i<=x;i++)if(x%i==0)return 0;return 1;
}
void get_data(){
int i;
pn=0;
for(i=1;i<1001;i++){
pnum[i]=pnum[i-1];
if(isprime(i)){
prime[pn++]=i;
pnum[i]++;
}
}

}
int N,C;
void run(){
int i;
if(C>=(1+pnum[N])/2){
for(i=0;i<pnum[N];i++)printf(" %d",prime[i]);
return;
}
if(pnum[N]%2){
for(i=0;i<C*2-1;i++)printf(" %d",prime[i+(pnum[N]+1)/2-C]);
}else for(i=0;i<C*2;i++)printf(" %d",prime[i+pnum[N]/2-C]);
}
int main(){
get_data();
while(scanf("%d%d",&N,&C)!=EOF){
printf("%d %d:",N,C);
run();
printf("\n\n");
}
return 0;
}本回答被提问者采纳

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答