代码如下 :
#include <stdio.h>
#define MAX 100 // 数组最大数
typedef struct _Node {
int value;
int count;
}Node;
typedef struct {
Node values[MAX];
int size;
}List;
Node *List_Add(List *pList, int value) {
Node *pNode = &pList->values[pList->size];
pNode->value = value;
pNode->count = 1;
pList->size++;
return pNode;
}
Node *List_Find(List *pList, int value)
{
int i;
for (i = 0; i < pList->size; i++) {
if (pList->values[i].value == value) {
return &pList->values[i];
}
}
return NULL;
}
int main()
{
int numbers[MAX], n, i;
List list;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
list.size = 0;
for (i = 0; i < n; i++) {
Node *pNode = List_Find(&list, numbers[i]);
if (pNode != NULL) {
pNode->count++;
}
else {
List_Add(&list, numbers[i]);
}
}
for (i = 0; i < list.size; i++) {
if (list.values[i].count >= 2) {
printf("数组共有%d个数字%d\n", list.values[i].count, list.values[i].value);
}
}
return 0;
}
运行结果:
追问能讲一下大致的思路吗?
追答思路是定义一个数据结构Node保存数字和数字的对应出现次数。程序首先从键盘读取统计的数字个数 n, 然后再从键盘读取 n 个数字保存到数组 numbers 中。
然后,第二个 for 循环进行统计每个数字出现的次数,保存到 List Node 中。
最后,第三个 for 循环进行输出数字出现次数count大于2统计的结果。