662
技術社區[雲棲]
poj 1595 Prime Cuts
好久沒有刷題了,第一題還算順利,這道題難度不大,但是卻有嚴格的輸出格式,少打一個空行就直接presentation error了,不過改一下就AC了
用的素數篩,開始預處理素數,之後就隻用讀表了
AC的代碼:
#include <stdio.h>
#define MAXN 1002
int 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;
}
最後更新:2017-04-03 07:57:12