閱讀662 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Linux 下zip、unzip解壓縮命令用法
  下一篇:go boost-1.53源碼編譯