【问题描述】
输入一组无序的整数,编写程序按照整数出现次数由多到少输出整数及其出现次数,若出现次数相同,则按照输入顺序输出。
【输入形式】
先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。
【输出形式】
在标准输出上按照整数出现次数由多到少输出整数及其出现次数,每行显示一个整数及其出现次数,两者以一个空格分隔,出现次数后跟一个回车;若出现次数相同,则按照输入顺序输出。
【样例输入】
10
0 -50 0 632 5813 -50 9 -50 0 632
【样例输出】
0 3
-50 3
632 2
5813 1
9 1
【样例说明】
输入了10个整数,其中0和-50出现3次,0先输入,所以先输出0及其出现次数,再输出-50及其出现次数;632出现了2次;5813和9只出现1次,5813先出现先输出。
【评分标准】
该程序要求输出整数及其出现次数,提交程序文件名为exam1.c或exam1.cpp。
#include <stdio.h>
#include <stdlib.h>
void input(int *p, int n)
{
for(int i = 0; i < n; i++)
{
scanf("%d", p + i);
}
}
void output(int *p, int *q, int n)
{
for(int i = 0; i < n; i++)
{
printf("%d %d\n", *(p + i), *(q + i) );
}
}
void copy(int *p, int *q, int n)
{
for(int i = 0; i < n; i++)
{
*(q+i) = *(p+i);
}
}
int removesame(int *p, int n)
{
int i, j, k;
for(i = 0; i < n; i++)
{
for(j = i+1; j < n; j++)
{
if(p[i] == p[j])
{
for(k = j; k < n; k++)
{
p[k] = p[k+1];
}
j--;
n--;
}
}
}
return n;
}
int *count(int *p, int n, int *q,int len)
{
int *arr;
arr = (int *)malloc(sizeof(int)*len);
for(int i = 0; i < len; i++)
{
arr[i] = 0;
for(int j = 0; j < n; j++)
{
if(q[i] == p[j])
{
arr[i] += 1;
}
}
}
return arr;
}
int main()
{
int n;
scanf("%d", &n);
int num[n], removed[n];
input(num,n);
copy(num,removed,n);
int len = removesame(removed,n);
int *countnum;
countnum = count(num,n,removed,len);
output(removed,countnum,len);
return 0;
}
哈哈哈
嗨害嗨