C语言每日一练(006)
题目
在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。如序列3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1次,5出现1次。要求对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。
数据约定
n<=1000; 0<x<1000000
输入
第一行正整数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
代码
首先,从控制台输入数据保存到目标数组中;其次给目标数组元素进行从小到大排序;最后再进行数据统计。
/*******************************************************************************************************
** 题 目: 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。如序列3,1,2,1,5,1,2。
其中1就出现3次,2出现2次,3出现1次,5出现1次。要求对于给定的正整数序列,从小到大
依次输出序列中出现的数及出现的次数。
** 数据约定:n<=1000; 0<x<1000000.
** 输 入: 第一行正整数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>
#include <string.h>
void swap(int *array, int i, int j);
void BubbleSortSmallToBig(int *array, int len); // O(n*n)
// 主函数
int main(void)
{
// 数据输入
int n;
scanf("%d", &n);
int arr[n];
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
// 从小到大排序
BubbleSortSmallToBig(arr, n);
// 处理方式如下
int j = 0;
int tmp = 0;
int num = 0;
while (j != n)
{
tmp = arr[j];
while (tmp == arr[j])
{
num++;
j++;
}
printf("%d %d\n", tmp, num);
num = 0;
}
return 0;
}
// 数组内元素交换
void swap(int *array, int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
// 从小到大排序
void BubbleSortSmallToBig(int *array, int len) // O(n*n)
{
int i = 0;
int j = 0;
for(i=0; i<len; i++)
{
for(j=len-1; j>i; j--)
{
if( array[j] < array[j-1] )
{
swap(array, j, j-1);
}
}
}
}
运行结果
转发、点在看就是对小编最大的支持!
猜你喜欢