SSL-ZYC 奇数统计
2018-01-31 19:13
183 查看
题目大意:
给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。
思路:
直接暴力!
下面给出两种做法:
(1)不保险的:桶排
(2)保险的:快排
这道题个人认为快拍更加保险。因为题目没有告诉你这个数字最大是多少,使用桶排有可能会爆内存。虽然这道题用快排比桶排慢,但是更加保险,不会有爆内存的可能。
代码:
给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。
思路:
直接暴力!
下面给出两种做法:
(1)不保险的:桶排
(2)保险的:快排
这道题个人认为快拍更加保险。因为题目没有告诉你这个数字最大是多少,使用桶排有可能会爆内存。虽然这道题用快排比桶排慢,但是更加保险,不会有爆内存的可能。
代码:
桶排:
#include <cstdio> using namespace std; int n,m,a[10001]; int main() { freopen("count.in","r",stdin); freopen("count.out","w",stdout); scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&m); a[m]++; } for (int i=0;i<=10000;i++) if (a[i]%2==1) { printf("%d\n",i); return 0; } }
快排:
#include <cstdio> #include <algorithm> using namespace std; int n,a[500001],x,head,sum,maxn; void sorts(int l,int r) { int i=l,j=r; int z=a[(i+j)/2]; do { while (a[i]<z) i++; while (a[j]>z) j--; if (i<=j) { swap(a[i],a[j]); i++; j--; } } while (i<=j); if (i<r) sorts(i,r); if (j>l) sorts(l,j); } int main() { freopen("count.in","r",stdin); freopen("count.out","w",stdout); scanf("%d",&n); a[n+1]=-2147483646; for (int i=1;i<=n;i++) { scanf("%d",&a[i]); } sorts(1,n); head=a[1]; sum=1; for (int i=2;i<=n+1;i++) { if (a[i]==head) sum++; else { if (sum%2==1) { printf("%d\n",a[i-1]); return 0; } head=a[i]; sum=1; } } }
相关文章推荐
- SSL-ZYC 逆序统计
- SSL-ZYC 1500 最短路上的统计
- SSL-ZYC 1692 魔板
- SSL-ZYC 2347 搭配购买
- SSL-ZYC 2406 约数
- SSL-ZYC 大盗阿福
- SSL-ZYC 1616 1762 工厂的烦恼
- SSL-ZYC 逃离洞穴
- SSL-ZYC 手机
- SSL-ZYC 小麦高度
- SSL-ZYC 2344 刻录光盘
- 编写程序,当程序运行后,根据屏幕提示输入一个数字字符串,输入后统计有多少个偶数数字和奇数数字。
- SSL-ZYC 2408 比萨
- SSL-ZYC 抓捕嫌疑犯
- SSL-ZYC 游戏
- SSL-ZYC 懒惰的奶牛②
- SSL-ZYC 公牛数学
- 5个奇数统计及文件操作
- 编写程序,当程序运行后,根据屏幕提示输入一个数字字符串,输入后统计有多少个偶数数字和奇数数字。
- SSL 2545 2546 2547 2548 奇数 求和 圆环 旋转