Codeforces Round #467 (Div. 2) A、B
A题,题目链接:http://codeforces.com/contest/937/problem/A
(水题)题意:输入n个数,求去零与去重后数的个数。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
B题题目链接:http://codeforces.com/contest/937/problem/B
题意:求2~y之间的数x,x满足:不能整除2~p之间的任何一个数。
思路:从y->2开始寻找最大的素数,但是在判断是否是素数的循环条件中要加入一条:i<=p;
(这个条件的加入是为了防止x可能不是素数,但是x不含有2~p之间的任何一个因数)(*)
/// 这道题错了好多次啊,知道是求素数,错了好多发财想到还有这一种情况出现(*)。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
C题待续......