A: 假设输入数据如下
1, 60, 55, 60, 24, 88, 75, 60, 48, 55
输出结果为 60: 3, 55: 2
B: 假设输入数据如下
74, 92, 70, 71, 33, 28, 32, 22, 9, 11
输出结果为: NO
分析:
这个问题是对数据的分组,拿第一组数据为例,可以分组为
1: 1, 60: 3, 55: 2, 24: 1, 88: 1, 75: 1, 60: 1, 48: 1
然后根据分组结果,判断有没有重复数字。
程序代码:
#include <stdio.h>
// 数在 nums 中时,返回下标,否则返回 -1
int data_in_nums(int num, int *array, int tail)
{
for (int i = 0; i < tail; i++)
{
if (num == array[i])
{
return i;
}
}
return -1;
}
int main()
{
int data[] = {1, 60, 55, 60, 24, 88, 75, 60, 48, 55};
// int data[] = {74, 92, 70, 71, 33, 28, 32, 22, 9, 11};
int nums[10] = {0};
int tail = 0;
int counts[10] = {0};
for (int i = 0; i < 10; i++)
{
int j = data_in_nums(data[i], nums, tail);
if (j != -1)
{
counts[j] += 1; // 已经存在的数,计数加一
}
else
{
int k = tail;
nums[k] = data[i]; // 不存在的数,存入 nums
counts[k] = 1; // 计数置 1
++tail;
}
}
if (tail == 10)
{
puts("NO");
return 0;
}
for (int i = 0; i < tail; i++)
{
if (counts[i] > 1)
{
printf("%d: %d\n", nums[i], counts[i]);
}
}
}