C语言输出一维数组中最小的正整数元素及其下标。若最小值的正整数有多个,请输出下标最大的一个,如果没有找到,输出-1。
时间: 2024-05-06 10:20:37 浏览: 89
以下是一个示例代码:
```c
#include <stdio.h>
int main()
{
int a[] = {3, -2, 6, 0, 5, 1, 2};
int n = sizeof(a) / sizeof(a[0]);
int min = -1, index = -1;
for (int i = 0; i < n; i++) {
if (a[i] > 0 && (min == -1 || a[i] < min || (a[i] == min && i > index))) {
min = a[i];
index = i;
}
}
if (min == -1) {
printf("没有找到正整数元素\n");
} else {
printf("最小的正整数元素为 %d,下标为 %d\n", min, index);
}
return 0;
}
```
解释:
1. 定义一个一维数组a,同时计算数组的长度n;
2. 定义min和index变量,分别表示最小的正整数元素和其下标,初始值都为-1;
3. 使用循环遍历数组a,对于每个正整数元素,判断其是否小于当前的最小值min,或者是否等于当前的最小值min但下标更大index,如果是,则更新min和index;
4. 最后根据min的值是否为-1来判断是否找到了最小的正整数元素,如果找到了则输出其值和下标,否则输出提示信息。
相关问题
题目描述 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。 输出 输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。使用C语言不用函数而是使用二维数组
好的,那么这里提供一个使用C语言实现的解决方案,不使用函数而是使用二维数组:
```c
#include <stdio.h>
int main() {
int n, i, j, k, max_index, min_index, saddle_point_exist = 0;
scanf("%d", &n);
int matrix[n][n];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
for (i = 0; i < n; i++) {
max_index = 0;
for (j = 1; j < n; j++) {
if (matrix[i][j] > matrix[i][max_index]) {
max_index = j;
}
}
for (k = 0; k < n; k++) {
if (matrix[k][max_index] < matrix[i][max_index]) {
break;
}
}
if (k == n) {
printf("%d %d\n", i, max_index);
saddle_point_exist = 1;
break;
}
}
if (!saddle_point_exist) {
printf("NONE\n");
}
return 0;
}
```
该程序首先输入一个正整数n,表示矩阵的阶数。随后输入n行,每行有n个整数,表示矩阵的元素。程序会先将输入的矩阵存储在二维数组matrix中。
接着程序会在矩阵中寻找鞍点。对于矩阵中的每一行i,程序会先找到该行中最大值所在的列max_index。然后程序会在第max_index列中寻找最小值,如果该最小值等于matrix[i][max_index],则说明matrix[i][max_index]是一个鞍点,输出其位置(i, max_index),并将saddle_point_exist设置为1。最后程序会判断saddle_point_exist的值,如果为0,则输出"NONE"。
C语言题,四、拓展编程题 (1)找鞍点: 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点,就输出其下标,否则,输出“NONE”。假设方阵a至多存在1个鞍点。试编写相应程序。(注意需要复制后格式正确)
以下是 C 语言代码实现:
```c
#include <stdio.h>
int main() {
int n, a[6][6];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
int row = -1, col = -1;
for (int i = 0; i < n; i++) {
int max_in_row = 0, min_in_col = 0;
for (int j = 0; j < n; j++) {
if (a[i][j] > a[i][max_in_row]) {
max_in_row = j;
}
if (a[j][i] < a[min_in_col][i]) {
min_in_col = j;
}
}
if (a[i][max_in_row] == a[min_in_col][i]) {
row = i;
col = max_in_row;
break;
}
}
if (row != -1 && col != -1) {
printf("%d %d", row, col);
} else {
printf("NONE");
}
return 0;
}
```
代码思路:
1. 首先输入正整数 n 和 n 阶方阵 a 的元素。
2. 使用两层循环遍历方阵 a 中的每个元素,并记录每行中的最大值和每列中的最小值。
3. 如果某个元素同时满足在行中为最大值,在列中为最小值,那么该元素就是鞍点,记录其下标并退出循环。
4. 如果没有找到鞍点,输出 "NONE"。
注意事项:
1. 因为题目要求方阵 a 的阶数最大为 6,所以我们可以直接定义一个 6 × 6 的二维数组来表示方阵。
2. 代码中使用变量 row 和 col 来记录鞍点的行和列,初始值都为 -1,如果最终没有找到鞍点,则它们的值不会被修改,便于输出 "NONE"。
阅读全文