北京化工大学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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章