1877: 终考成绩统计

题目描述:

终考结束后,老师想知道同学们的考试分数情况 ,输入全班n个同学的成绩,请你设计程序统计每个分数出现的次数。 输入 第一行是一个整数n代表全班人数, 第二行的n个整数,分别是每个同学的成绩 ,输出 n行,每行两个整数 ,第一个数代表成绩,第二个数代表该成绩的人数。

输入

输入整数n,表示要输入多少个学生的成绩(1<=n<=100)。 依次输入n个成绩(100分制)

输出

输出 n行,每行两个整数 ,第一个数代表成绩,第二个数代表该成绩的人数 (按成绩输入的顺序计算人数,不用排序)

样例输入

6 89 90 89 91 90 89

样例输出

89 3 90 2 91 1

一维数据的做法,步骤较复杂,可以好好学习一下。
#include<bits/stdc++.h>
using namespace std;
//统计成绩出现次数问题(数组去重) 一维数组做法及思路
const int N=105;//声明常量N ,用来做数组的长度
int a[N],b[N],c[N],n; //b数组用来存去重后的成绩,c数组用来存储人数 
int main(){
	cin>>n;
	//输入成绩,并插入到a数组中 
	for(int i=0;i<n;i++) cin>>a[i];
	//去重处理,统计计算次数
	 int m = 0;//去重后的元素数量,从0开始统计  
	 for(int i=0;i<n;i++) {
	 	bool s=false;//定义状态变量,用于标识是否出现重复的成绩 
	 	for(int j=0;j<m;j++) {
	 		//如果a数组中当前位置的成绩在b数组中出现了 
	 		if(a[i]==b[j]){
	 			s=true;
	 			//人数加 1 
	 			c[j]++;
	 			break;
			 }
		 }
		 //没有出现重复时,将当前成绩插入到b数组中,人数插入到c数组 人数为 1 
		 if(s == false){
		 	b[m]=a[i];
		 	c[m]=1;
		 	m++;
		 }
	 }
	 for(int i=0;i<m;i++) {
		cout<<b[i]<<" "<<c[i]<<"\n"; 
	}	
	return 0;
}
vector向量的做法
#include<bits/stdc++.h>
using namespace std;
int cnt=1;
int main() {
    vector<int> v; 
    int n, a;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a;
        v.push_back(a);
    }
    for (int i = 0; i < int(v.size()); i++) {
        for (int j = i+1; j < int(v.size()); j++) {
            //判断是否存在相同的分数 
            if (v[i] == v[j]) { 
                cnt++;
                //删除重复的项 
                v.erase(v.begin()+j);  
            }
        }
        cout << v[i] << " " << cnt << endl; 
        cnt = 1;
    }
    return 0;
}