北京化工大學2018年10月程序設計競賽 Problem B 求素數

在這裏插入圖片描述
輸入

共兩行:
第一行爲N何L,中間用空格隔開。 (1<=N<=100 , 1<=L<=7)
第二行爲N個0~9的數字,中間用空格隔開。
輸出

只有一行,含全部滿足條件的素數,中間用逗號隔開,保證至少存在一個素數。
樣例輸入

10 3
8 9 1 0 2 3 5 4 7 6

樣例輸出

547

這道題補了也蠻久了,WA都WA習慣了,準備最後再WA一次就先睡了,結果突然就過了,震驚了。
回過頭來看看代碼,其實也不難寫,還是在細枝末節的小地方概念不清楚,或者是遺漏掉,哎,還要加油啊。

    #include<stdio.h>
    #include<string>
    #include<string.h>
    #include<iostream>
    #include<queue>
    #include<vector>
    #include<list>
    #include<set>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    int main()
    {
    	int n,l,a[105],ans[105],cnt;
    	set<int> se;
    	bool flag;
    	while(scanf("%d%d",&n,&l)!=EOF)
    	{
    		cnt=0;
    		memset(a,0,sizeof(a));
    		memset(ans,0,sizeof(ans));
    		for(int i=0;i<n;i++)
    			scanf("%d",&a[i]);
    		for(int i=0;i+l-1<n;i++)
    		{
    			int k=i;
    			for(int j=l-1;j>=0;j--)
    			{
    				ans[i]+=a[k]*pow(10,j);
    				k++;
    			}
    			//printf("%d  ",ans[i]);
    		}
    		for(int i=0;i<n-l+1;i++)
    		{
    			flag=true;
    			for(int j=2;j<ans[i]/2;j++)
    			{
    				if(ans[i]%j==0)
    				{
    					flag=false;
    					break;
    				}
    			}
    			if(flag)
    			{
    				se.insert(ans[i]);
    			}
    		}
    		set<int>::iterator iter;
    		int k=1;
    		for(iter=se.begin();iter!=se.end();iter++)
    		{
    			//cout<<*iter/pow(10,l-1)<<endl;
    			if(*iter/(int)pow(10,l-1)==0)
    				continue;
    			if(k)
    			{
    				k=0;
    				printf("%d",*iter);
    				continue;
    			}
    			printf(",%d",*iter);
    		}
    		printf("\n");
    	}
    	//system("pause");
    return 0;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章