数的统计
描述
在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。
如序列:3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1 次,5出现1次。
你的任务是对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。
输入
输入描述:
第一行正整数n,表示给定序列中正整数的个数。
第二行是n 个用空格隔开的正整数x,代表给定的序列。
输入样例:
12
8 2 8 2 2 11 1 1 8 1 13 13
输出
输出描述:
若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序列中出现的次数。
输出样例:
1 3
2 3
8 3
11 1
13 2
#include<stdio.h>
void sort(unsigned int a[],int size){ //创建一个排列函数,将数组里的数从小到大排序
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
if(a[j]>a[j+1]){
int temp;
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
}
int main(){
int n,sum=1;
scanf("%d",&n);
unsigned int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,n);
for(int i=0;i<n;i++){ //判断前一项是否等于后一项,若不等于,输出该数和该数个数
if(a[i]==a[i+1]){
sum++;
}else{
printf("%ld %d\n",a[i-1],sum);
sum=1;
}
}
}
这道题值得注意的是数据的限制为数据:n<=1000;0<x<=1000,000
该x的范围int不能完全涉及,long太大,于是我选择用了unsigned int,运行成功