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;
}