c语言怎样数中相同的数装在二维数组
时间: 2024-10-13 20:01:34 浏览: 17
在C语言中,如果你想要统计一个整数数组(一维)中的相同数值并将其存储在一个二维数组中,你可以使用哈希表或计数排序的思想来实现。这里我将以哈希表为例来说明。
首先,定义一个大小适当的二维数组用于存放计数结果,以及一个哈希表(例如使用`struct`表示,每个元素包含值和出现次数)。然后遍历原始的一维数组,对于每个元素,检查哈希表是否已有该值的记录,如果有,就增加计数;如果没有,则在哈希表中添加新项并设置计数为1。
以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
#define ROWS 10
#define COLS 5
typedef struct {
int value;
int count;
} CountPair;
CountPair hash_table[MAX_SIZE]; // 哈希表,用于存储值和计数
int hash_count = 0; // 记录哈希表当前元素的数量
void increment_hash(int num) {
for (int i = 0; i < hash_count; i++) {
if (hash_table[i].value == num) {
hash_table[i].count++;
return;
}
}
// 如果没找到,添加新的计数对
if (hash_count < MAX_SIZE) {
hash_table[hash_count].value = num;
hash_table[hash_count++].count = 1;
} else {
printf("Hash table overflow, cannot store more elements.\n");
}
}
// 主函数
int main() {
int input[ROWS * COLS];
// 假设已填充好输入数组
for (int i = 0; i < ROWS * COLS; i++) {
increment_hash(input[i]);
}
// 将哈希表转换为二维数组(如果需要)
int result[MAX_SIZE][2] = {0};
for (int i = 0; i < hash_count; i++) {
result[i][0] = hash_table[i].value;
result[i][1] = hash_table[i].count;
}
// 打印结果
for (int j = 0; j < hash_count; j++) {
printf("%d appears %d times.\n", result[j][0], result[j][1]);
}
return 0;
}
```
在这个例子中,我们没有直接把相同数量的元素放入二维数组,因为通常情况下,同一个值可能出现在数组的不同位置,所以可能需要一个单独的数组来存储每个唯一值及其对应的计数。如果你想用二维数组来表示每种值及其出现次数,你需要调整结构体的布局或者使用其他数据结构。
阅读全文