二维数组

来源:

慕斯1141686

2024-11-07

定义一个N*M的二维数组,数组的值用随机函数产生,范围是1-100,输出该数组中满足“该行最大,该列最小”的数,并输出该数的位置。用C语言实现
写回答

2回答

bennyhuo

2024-12-03

考虑到同学的题目就是常规程序题目,AI往往更加擅长回答此类问题。

以下答案由腾讯元宝AI生成,希望对同学有帮助。

以下是一个用C语言实现的程序,它定义了一个N*M的二维数组,数组的值用随机函数产生,范围是1-100,并输出满足“该行最大,该列最小”的数及其位置。

```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 3
#define M 4

// 生成随机数
int random_number(int min, int max) {
    return rand() % (max - min + 1) + min;
}

// 找到某行的最大值及其列索引
void find_max_in_row(int row[N], int *max_value, int *max_index) {
    *max_value = row[0];
    *max_index = 0;
    for (int j = 1; j < M; j++) {
        if (row[j] > *max_value) {
            *max_value = row[j];
            *max_index = j;
        }
    }
}

// 找到某列的最小值及其行索引
void find_min_in_col(int array[N][M], int col, int *min_value, int *min_index) {
    *min_value = array[0][col];
    *min_index = 0;
    for (int i = 1; i < N; i++) {
        if (array[i][col] < *min_value) {
            *min_value = array[i][col];
            *min_index = i;
        }
    }
}

int main() {
    int array[N][M];
    srand(time(NULL)); // 初始化随机数种子

    // 生成随机数组
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            array[i][j] = random_number(1, 100);
        }
    }

    // 打印数组
    printf("Generated Array:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            printf("%4d", array[i][j]);
        }
        printf("\n");
    }

    // 查找满足条件的数及其位置
    for (int i = 0; i < N; i++) {
        int max_value, max_index;
        find_max_in_row(array[i], &max_value, &max_index);

        int min_value, min_index;
        find_min_in_col(array, max_index, &min_value, &min_index);

        if (max_value == min_value && i == min_index) {
            printf("Number %d at position (%d, %d) satisfies the condition.\n", max_value, i, max_index);
        }
    }

    return 0;
}
```

### 解释
1. **随机数生成**:使用`random_number`函数生成1到100之间的随机数。
2. **数组初始化**:使用嵌套循环初始化二维数组`array`。
3. **打印数组**:打印生成的二维数组。
4. **查找满足条件的数**:
   - `find_max_in_row`函数找到某行的最大值及其列索引。
   - `find_min_in_col`函数找到某列的最小值及其行索引。
   - 遍历每一行,找到该行的最大值及其列索引,然后检查该列的最小值是否等于该行的最大值,并且位置相同。

### 注意事项
- 确保`N`和`M`的值在编译时定义好。
- 该程序假设`N`和`M`的值不会太大,以免影响性能。
0
0

bennyhuo

2024-12-03

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 3
#define M 4

// 生成随机数
int random_number(int min, int max) {
    return rand() % (max - min + 1) + min;
}

// 找到某行的最大值及其列索引
void find_max_in_row(int row[N], int *max_value, int *max_index) {
    *max_value = row[0];
    *max_index = 0;
    for (int j = 1; j < M; j++) {
        if (row[j] > *max_value) {
            *max_value = row[j];
            *max_index = j;
        }
    }
}

// 找到某列的最小值及其行索引
void find_min_in_col(int array[N][M], int col, int *min_value, int *min_index) {
    *min_value = array[0][col];
    *min_index = 0;
    for (int i = 1; i < N; i++) {
        if (array[i][col] < *min_value) {
            *min_value = array[i][col];
            *min_index = i;
        }
    }
}

int main() {
    int array[N][M];
    srand(time(NULL)); // 初始化随机数种子

    // 生成随机数组
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            array[i][j] = random_number(1, 100);
        }
    }

    // 打印数组
    printf("Generated Array:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            printf("%4d", array[i][j]);
        }
        printf("\n");
    }

    // 查找满足条件的数及其位置
    for (int i = 0; i < N; i++) {
        int max_value, max_index;
        find_max_in_row(array[i], &max_value, &max_index);

        int min_value, min_index;
        find_min_in_col(array, max_index, &min_value, &min_index);

        if (max_value == min_value && i == min_index) {
            printf("Number %d at position (%d, %d) satisfies the condition.\n", max_value, i, max_index);
        }
    }

    return 0;
}
0
0

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程