求解二维数组的最大/最小元素
实例说明
在 n 行 n 列的二维整数数组中,按以下要求选出两个数。首先从每行选出最大数,再从选出
的 n 个大数中选出最小数;其次,从每行选出最小数,再从选出的 n 个小数中选出最大数。
实例解析
设二维数组为 a[ ][ ],首先在 n 行 n 列二维整数数组中,从每行选出最大数,再从选出的 n
个大数中选出最小数,可以用以下算法实现:
[算法 1]在二维整数数组中,从每行选出最大数,再从选出的大数中选出最小数
{/*设最小元变量用 min 标记,各行的最大元变量用 max 标记*/
for(min=a[0][0],row=0;row<n;row++)
{
/*从每行选出最大数*/
for(max=a[row][0],col=1;col<n;col++) /*从 row 行选出最大数*/
if(max<a[row][col])
max=a[row][col];
if(min>max)/*保存至 row 行的最小数*/
min=max;
}
printf("The minimum of maximum numbers is %d\n",min) ;
}
从每行选出最小数,再从选出的 n 个小数中选出最大数,有如下的算法:
[算法 2]在二维整数数组中,从每行选出最小数,再从选出的小数中选出最大数
{/*设最大元变量用 max 标记,各行的最小元变量用 min 标记*/
for(max=a[0][0],row=0;row<n;row++)
{
/*从每行选出最大数*/
for(min=a[row][0],col=1;col<n;col++) /*从 row 行选出最小数*/
if(min>a[row][col])
min=a[row][col];
if(max<min)/*保存至 row 行的最大数*/
max=min;
}
printf("The maximum of minimum numbers is %d\n",max);
}
程序代码
#include <stdio.h>
// system("cls");/* 清屏 */
void clrscr(){
system("cls");/* 清屏 */
}
/* 计算二维数组的最大最小值*/
#define MAXN 20
int a[MAXN][MAXN];
int main()
{
int min, /* 存储最小值 */
max; /* 存储最大值 */
int row,col,n;
clrscr();
printf("Please input the order of the matrix:\n");/* 输入方阵的阶次 */
scanf("%d",&n);
printf("Please input the elements of the matrix,\n from a[0][0] to a[%d][%d]:\n",n-1,n-1);
for(row=0;row<n;row++)
for(col=0;col<n;col++)
scanf("%d",&a[row][col]);
for(min=a[0][0],row=0;row<n;row++)
{
/* 从每行选出最大数 */
for(max=a[row][0],col=1;col<n;col++)/*从 row 行选出最大数 */
if(max<a[row][col])
max=a[row][col];
if(min>max)/* 保存至 row 行的最小数 */
min=max;
}
printf("The minimum of maximum number is %d\n",min);
for(max=a[0][0],row=0;row<n;row++)
{
/* 每行选出最小数 */
for(min=a[row][0],col=1;col<n;col++)/* 从 row 行选出最小数 */
if(min>a[row][col])
min=a[row][col];
if(max<min)/*保存至 row 行的最大数 */
max=min;
}
printf("The maximum of minimum numbers is %d\n",max);
printf("\nPress any key to quit...\n");
getch();
return 0;
}
程序运行截图
归纳注释
本例应用数组 primes[]来存储已经找到的前 n−1 个质数,再通过对第 n−1 个质数加 2,并测试
是否能被前 n−1 个质数整除来寻找第 n 个质数,从而可以求出前 n 个质数。这里 n 可以足够大(取
决于 int 型数据的取值范围,可以改为 long 型数组,以便求取更多的质数)。
本例子中求取前 n 个质数,n 用宏定义来实现,也可以通过用户的输入来进行。比如定义一
个最大的数以便定义数组“#define MAX 1000”,数组定义改为 int primes[MAX],n 则由用户输入。