题目描述
算法设计+题目分析
分析题目:
统计在数组中出现的数字的次数:
1、建立一个结构,包含数字和出现次数;
2、边输入边统计次数;
3、使用sort来对数组排序;
4、在遇到元素的num是0之前,打印元素内的数字和次数。
注意点+记录点
无
代码(100分)
环境
Visual C++6.0
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
struct node{
int index;//数字
int num;//出现次数
node(int _index, int _num): index(_index), num(_num) {}//初始化
};
bool cmp(node a, node b){//比较函数,先按次数比较,次数大的靠前,再按数字比较,数字小的在前
if (a.num != b.num) return a.num>b.num;
else return a.index<b.index;
}
int main(){
int n;
vector<node> re;
for(int z=0; z<1010; z++) re.push_back(node(z,0));
scanf("%d", &n);//映射数组初始化
int t;
for (int i=0; i<n; i++){
scanf("%d", &t);
re[t].num++;//对应的数字次数+1
}
sort(re.begin(), re.end(), cmp);//排序
for (int j=0; j<1010; j++){
if (re[j].num==0) break;
if (re[j+1].num==0) printf("%d %d", re[j].index, re[j].num);//遇到下一个元素的次数是0,不换行了
else printf("%d %d\n", re[j].index, re[j].num);
}
return 0;
}
感谢链接
无