码迷,mamicode.com
首页 > 编程语言 > 详细

数字排序问题(c++实现)

时间:2015-08-01 00:53:49      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

描述:给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。

输入:输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。

输出:输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。

input:

12
5 2 3 3 1 3 4 2 5 2 3 5

output:

3 4
2 3
5 3
1 1
4 1

分析:该题难点在于按出现次数递减的顺序输出整数和他出现的次数,所以需要二维数组a[10][2],其中a[][0]存整数,a[][1]存该整数出现次数,排序时整体交换,如果出现相同则线输出较小的再输出较大的,这里用到一个小技巧,具体看代码。
 1 #include<iostream>
 2 using namespace std;
 3 
 4 void sort(int a[][2])
 5 {
 6     int min;
 7     int n = 0;
 8     for (int i = 0; i < 10; i++)            //只对个数不为0的数字进行排序,由于初始是从小到大拍的,排序完成后相同的也是按从小到大
 9     {
10         if (a[i][1] != 0)
11             n++;
12     }
13     for (int i = 0; i < n; i++)
14     {
15         for (int i = 0;; i++)
16         {
17             if (a[i][1] != 0)
18             {
19                 min = i;
20                 break;
21             }
22         }
23 
24         for (int j = 0; j <= 9 - i; j++)
25         {
26             if (a[j][1]!=0)
27                 if (a[min][1] >= a[j][1])
28                     min = j;
29         }
30         int x = a[min][0], y = a[min][1];
31         a[min][0] = a[9 - i][0]; a[min][1] = a[9 - i][1];
32         a[9 - i][0] = x; a[9 - i][1] = y;
33     }
34 }
35 int main()
36 {
37     int n,x;
38     static int a[10][2];
39     cin >> n;
40     for (int i = 0; i < 10; i++)
41         a[i][0] = i;
42     for (int i = 0; i < n; i++)
43     {
44         cin >> x;
45         a[x][1]++;
46     }
47     sort(a);
48     for (int i = 0; i < 10; i++)
49     {
50         if (a[i][1] != 0)
51             cout << a[i][0] << " " << a[i][1] << endl;
52     }
53     system("pause");
54     return 0;
55 }

PS:感觉写麻烦了,欢迎有简化方法的交流。。。。

数字排序问题(c++实现)

标签:

原文地址:http://www.cnblogs.com/wuyoucao/p/4693481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!