感谢学长给我提供的统计思路,希望能帮上各位
我真的觉得我已经写的很清楚易懂了
如果哪里看不懂再问我就行啦
#include<iostream>
#include<algorithm>
using namespace std;
int times[200005]={0},na[200005];//次数,Natural number,记得数组按题目要求开大一点
int main()
{
int n;//自然数的个数
cin>>n;
for(int i=0;i<n;i++)//循环读入数字
{
cin>>na[i];
}
sort(na,na+n);//排序(注意:比如刚开始读入时是na[2]=100,这里表示100是第三个被读入的数,但排序后假如100是第5小的数,则排序后na[4]=100,下标会改变的)
int i=0,j=1;//i是这个数刚开始出现的位置,j是它出现的末位置
while(i<n)//开始统计个数
{
times[i]++;//首先统计自己,每个数一开始都是出现了1次的
while(na[i]==na[j])//当首位置的数与末位置的相等时,执行本循环
{
j++;//末位置往后推
times[i]++;//这个数又出现了一次
}
cout<<na[i]<<" "<<times[i]<<endl;//从小到大输出每个数出现的次数
i=j;j=i+1;//把新的首位置赋值为上一个数的末位置,末位置一开始都是首位置+1
}
return 0;//完结撒花
}