admin 管理员组文章数量: 1184232
Finding
题意:实验报告上有很多的数字,每个数字,出现偶数次,现在拿来三个数:x,y,z且有(x%4!=y%4)&&(y%4!=z%4)&&(x%4!=z%4)
input
第一行输入一个整数n,表示下面有n个整数
接下来一行有n个整数
output:
输出三个数,(从小到大排列),俩俩数字之间用空格隔开
Sample“
11
1 1 2 2 3 3 4 4 3 2 1
---------------------------------------------------------------------
1 2 3
第一种解法(Sort)
1 #include<stdio.h>
2 #include <algorithm>
3 using namespace std;
4 int main()
5 {
6
7 int n,i,m;
8 while(~scanf("%d",&n))
9 {
10 int a[n];m=3;
11 for(i=0;i<n;i++)
12 {
13 scanf("%d",&a[i]);
14 }
15 sort(a,a+n);
16 for(i=0;i<n;i+=2)
17 {
18 if(a[i]!=a[i+1])
19 {
20 if(m!=1)
21 printf("%d ",a[i]);
22 else
23 printf("%d\n",a[i]);
24 m--;
25 i--;
26 }
27 }
28 }
29 return 0;
30 } View Code 第二个解法(map)没想到
1 #include <map>
2 #include <cstdio>
3 #include <cstdlib>
4 using namespace std;
5
6 int
7 main(int argc, char *argv[])
8 {
9 int i;
10 int n;
11 int top;
12 int number;
13 int stack[3];
14
15 while (EOF != scanf("%d", &n)) {
16 map<int, int>mp;
17 map<int, int>::iterator it;
18
19 for (i=0; i<n; ++i) {
20 scanf("%d", &number);
21 ++mp[number];
22 }
23
24 top = 0;
25
26 for (it = mp.begin(); it!=mp.end(); ++it) {
27 if (0 != it->second%2) {
28 stack[top++] = it->first;
29 }
30 }
31
32 if ((3 == top) && (stack[0]%4 != stack[1]%4)&&(stack[1]%4 != stack[2]%4)&&(stack[0]%4 != stack[2]%4)) {
33 printf("%d %d %d\n", stack[0], stack[1], stack[2]);
34 }
35
36 mp.clear();
37 }
38
39 exit(0);
40 } View Code
)
转载于:.html
本文标签: Finding
版权声明:本文标题:Finding 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687917202a157207.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论