当前位置: 代码迷 >> 综合 >> poj 1595 Prime Cuts
  详细解决方案

poj 1595 Prime Cuts

热度:37   发布时间:2024-01-11 16:56:15.0

好久没有刷题了,第一题还算顺利,这道题难度不大,但是却有严格的输出格式,少打一个空行就直接presentation error了,不过改一下就AC了

用的素数筛,开始预处理素数,之后就只用读表了


AC的代码:

#include <stdio.h>#define MAXN 1002int prime[MAXN];  //内容0代表素数//对数字进行预处理,直接打印出1002以内素数
void PickPrime()
{//先打出素数表prime[1]=0;    //开始标记prime[1]为素数int i,j;for(i=2;i<MAXN;i++){if(prime[i]==0)		//如果prime[i]是素数就把他的倍数都筛掉{for(j=2*i;j<MAXN;j+=i)prime[j]=1;}}
}int main()
{int n,c,reallPrime[MAXN];int i,j,start,end;PickPrime();while(scanf("%d",&n)!=EOF){scanf("%d",&c);j=0;for(i=1;i<=n;i++)if(prime[i]==0)reallPrime[++j]=i;printf("%d %d:",n,c);//就是在j个数中选取中间c个数if(c<=j){//有even个素数if(j%2==0){start=(j-c*2)/2;end=start+c*2;for(i=start+1;i<=end;i++)printf(" %d",reallPrime[i]);}//有odd个素数else{start=(j-c*2+1)/2;end=start+c*2-1;for(i=start+1;i<=end;i++)printf(" %d",reallPrime[i]);}}else{for(i=1;i<=j;i++)printf(" %d",reallPrime[i]);}printf("\n\n");}return 0;
}