Codeforces Round #467 (Div. 2) A、B

A题,题目链接:http://codeforces.com/contest/937/problem/A

(水题)题意:输入n个数,求去零与去重后数的个数。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int n;
 7     while(scanf("%d",&n)!=EOF)
 8     {
 9         int a[1000];
10         for(int i=0;i<n;i++)
11         {
12             scanf("%d",&a[i]);
13         }
14         sort(a,a+n);
15         int ans=0;
16         if(a[0]!=0)
17             ans++;
18         for(int i=1;i<n;i++)
19         {
20             if(a[i]==0)
21                 continue;
22             if(a[i]==a[i-1])
23                 continue;
24             ans++;
25         }
26         printf("%d\n",ans);
27     }
28     return 0;
29 }
View Code

B题题目链接:http://codeforces.com/contest/937/problem/B

题意:求2~y之间的数x,x满足:不能整除2~p之间的任何一个数。

思路:从y->2开始寻找最大的素数,但是在判断是否是素数的循环条件中要加入一条:i<=p;

  (这个条件的加入是为了防止x可能不是素数,但是x不含有2~p之间的任何一个因数)(*)

  ///  这道题错了好多次啊,知道是求素数,错了好多发财想到还有这一种情况出现(*)。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int p,y;
 4 int prime(int x)
 5 {
 6     for(int i=2;i<=p&&i*i<=x;i++)///素数判断这里多了一个i<=p.为了防止出现上述说到的情况
 7     {
 8         if(x%i==0)
 9             return 0;
10     }
11     return 1;
12 }
13 int main()
14 {
15     while(scanf("%d %d",&p,&y)!=EOF)
16     {
17         int ans=-1;
18         for(int i=y;i>p;i--)
19         {
20             if(prime(i))
21             {
22                 ans=i;
23                 break;
24             }
25         }
26         printf("%d\n",ans);
27     }
28 
29     return 0;
30 }
View Code

 

C题待续......

posted @ 2018-02-26 18:49  孟加拉国  阅读(167)  评论(0编辑  收藏  举报