统计数字
Time Limit:1000MS Memory Limit:65536K
Total Submit:19 Accepted:14
Description
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
Input
输入包含n+1行:
第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。
Output
输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
Sample Input
9
2
3
2
3
3
4
2
5
4
Sample Output
2 3
3 3
4 2
5 1
Source
这题还是应该用map、容器来做比较好,但我理解的不多,所以还是用二维数组A掉了
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
long long t,n;
bool b=true;
while(scanf("%lld",&t)!=EOF)
{
if(!b) printf("\n");
b=0;
map<long long,long long>m;
set<long long>s;
vector<long long>v;
while(t--)
{
scanf("%lld",&n);
if(s.count(n)==0)
{
s.insert(n);
v.push_back(n);
m[n]=1;
}
else m[n]++;
}
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++)
printf("%lld %lld\n",v[i],m[v[i]]);
}
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,a[10001]={0},b[10001]={0};
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
if(a[j]==i)b[i]++;
}
for(int i=0;i<n;i++)
if(b[i]!=0)
cout<<i<<" "<<b[i]<<endl;
return 0;
}