CCF认证 - 201503-2 - 数字排序 (C++代码实现)(100分)
2019-03-15 09:03
218 查看
C++相较于C来说是十分好用,这次题目与之前的公共钥匙盒都用到了一个知识点,即用结构体数组实现数组的分字段排序(所以要在数组中表示输入的数字及对应出现次数),此外,还要考虑输入的数字中有0的情况,所以要开辟一个长度1000的结构体数组,用来存放对应数字出现的次数;
有个小技巧就是用数组的下标表示输入的数字,每输入一个数字,对应下标的元素加1,这样数组的每个元素与其下标就共同完成了对输入数字的计数;
#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> using namespace std; struct new_a { int no; int num; }a[1001]; bool cmp(new_a x, new_a y) { if(x.num == y.num) return x.no < y.no; return x.num > y.num; }//利用结构体数组对二维数组进行分字段排序,num为第一关键字,no为第二关键字; int main() { /* memset(a, 0, 1000 * sizeof(struct new_a)); //若结构体数组定义为局部数组,则需要memset函数对结构体数组进行初始化,注意其头文件为<cstring>; */ int n, number; scanf("%d", &n); for(int i = 0; i < 1001; i++) a[i].no = i;//数字编号涵盖0 - 1000; for(int i = 0; i < n; i++) { scanf("%d", &number); for(int i = 0; i < 1001; i++) if(a[i].no == number) { a[i].num++; break; } }//利用数组的下标以及二维数组来记录相应输入数字的个数; sort(a, a + 1001, cmp); for(int i = 0; i < 1001 && a[i].num != 0; i++) printf("%d %d\n", a[i].no, a[i].num); return 0; }
相关文章推荐
- CCF认证 - 201412-2 - Z字形扫描 (C语言代码实现)(100分)
- CCF认证 - 201403-2 -窗口(C语言代码实现)(100分)
- 201503-2 试题名称: 数字排序(100分)ccf认证
- 整数取反问题的算法实现(C/C++实现,极简5行代码)
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- C++ 搬水果贪心算法实现代码
- 插入排序(正序、倒序)-c++代码实现及运行实例结果
- 责任链模式的c++代码实现
- 面试题5:从尾到头打印链表的c++代码实现
- 种子填充算法描述及C++代码实现
- 查找-c++代码实现及运行实例结果
- Singleton模式(C++代码实现)
- c++实现logistic回归代码
- 移动最小二乘法(MLS)曲线曲面拟合C++代码实现
- Linux环境C/C++起Socket Server监听8080端口的代码实现
- 归并排序-c++代码实现及运行实例结果
- C++教你用代码实现把拷贝的内容放到剪贴板。
- 插入排序——直接插入排序和希尔排序,C++代码实现
- CCF 201503-2 数字排序 代码
- 归并排序的c++代码实现