给定一个长度为10的整数数组,统计每个元素出现的次数,并输出每个元素出现的所有位置即数组中的索引位置,用C语言完成,简洁明了
时间: 2024-12-15 09:16:22 浏览: 29
在C语言中,我们可以使用哈希表(如数组)来存储每个元素及其对应的索引,同时遍历数组计算元素出现的次数。以下是一个简单的示例程序:
```c
#include <stdio.h>
#define ARRAY_SIZE 10
// 定义结构体存储元素值和其出现的位置
typedef struct {
int value;
int index[ARRAY_SIZE]; // 可能有多个索引对应一个元素
int count; // 元素出现的次数
} Element;
void print_index_and_count(int arr[], int n) {
Element elements[ARRAY_SIZE] = {0}; // 初始化所有元素为未出现状态
for (int i = 0; i < n; ++i) {
if (arr[i] == elements[i].value) {
// 如果当前元素已经在列表中,则增加计数
elements[i].count++;
} else {
// 否则,元素首次出现,添加到列表并设置计数为1
elements[i].value = arr[i];
elements[i].count = 1;
// 更新之前出现过的该元素的计数为1(如果有)
for (int j = 0; j < i; ++j) {
if (arr[j] == arr[i]) {
elements[j].count = 1;
break;
}
}
}
// 添加当前元素的索引到已知索引列表中
elements[arr[i]].index[elements[arr[i]].count - 1] = i;
}
// 打印结果
for (int i = 0; i < ARRAY_SIZE; ++i) {
if (elements[i].value != 0) {
printf("元素 %d 出现 %d 次,索引位置: ", elements[i].value, elements[i].count);
for (int j = 0; j < elements[i].count; ++j) {
printf("%d ", elements[i].index[j]);
}
printf("\n");
}
}
}
int main() {
int arr[] = {5, 2, 3, 4, 2, 5, 1, 2, 5, 7};
int n = sizeof(arr) / sizeof(arr[0]);
print_index_and_count(arr, n);
return 0;
}
```
这个程序首先初始化一个`Element`结构体数组,然后遍历输入数组。对于每个元素,如果它已经存在于结构体中,就增加计数;否则,创建一个新的条目并将当前索引加入到相应元素的索引列表中。最后,打印出每个非零值元素及其出现的次数及位置。
注意:此解决方案假设数组中不会有重复的元素,如果有大量重复元素,内存可能会有所消耗。如果需要处理这种情况,可以考虑使用更复杂的数据结构,比如哈希表或有序集合。
阅读全文