題目7-5 求二維陣列的鞍點 (25分)
求二維陣列 arr[5][4]中的鞍點。鞍點是指陣列arr中arr[i][j]元素值在第i行中最小,且在第j列中最大。試撰寫一程式找出陣列arr中所有的鞍點,并輸出其下標值。如果沒有鞍點,列印輸出Not Found。
輸入格式:
輸入5行4列的二維陣列。
輸出格式:
輸出該二維陣列中所有的鞍點,并輸出其對應的行下標和列下表值。如果沒找到鞍點,輸出Not Found。
輸入樣例:
20 15 43 75
165 183 88 95
6 0 -5 7
35 8 9 16
10 7 15 33
輸出樣例:
88 [1,2]
輸入樣例:
1 2 3 4
5 6 7 8
9 10 11 17
13 14 15 16
20 18 19 12
輸出樣例:
Not Found
感覺原理都差不多,為什么我的就顯示運行超時?請大佬指導。




uj5u.com熱心網友回復:
發這么多圖片,不如直接把代碼貼出來~#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 4
#define COL 5
void init_array(int (*array)[COL], int row, int col)
{
int i, j;
srand(time(NULL));
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
array[i][j] = rand() % 100;
}
void show_array(int (*array)[COL], int row, int col)
{
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++)
printf("%2d ", array[i][j]);
putchar(10);
}
}
void check_saddle_point(int (*point)[2], int (*array)[COL], int row, int col)
{
int i, j, k, cnt = 0;
int row_idx, col_idx;
int max_row, min_col;
for (i = 0; i < row; i++) {
max_row = array[i][0];
col_idx = 0;
/* find max value in row */
for (j = 1; j < COL; j++)
if (max_row < array[i][j]) {
max_row = array[i][j];
col_idx = j;
}
/* Find min value in col */
min_col = array[i][col_idx];
row_idx = i;
for (k = 0; k < row; k++)
if (min_col > array[k][col_idx]) {
min_col = array[k][col_idx];
row_idx = k;
}
/* Check the condition*/
if (row_idx == i && min_col == max_row) {
point[cnt][0] = row_idx;
point[cnt][1] = col_idx;
cnt++;
}
}
}
void init_point_array(int (*point)[2], int row)
{
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < 2; j++)
point[i][j] = -1;
}
void show_saddle_point(int (*point)[2], int (*array)[COL], int row)
{
int i, row_idx, col_idx;
for (i = 0; i < row; i++) {
row_idx = point[i][0];
col_idx = point[i][1];
if (row_idx >= 0 && col_idx >= 0)
printf("鞍點為array[%d][%d] = %d\n", row_idx, col_idx, array[row_idx][col_idx]);
}
}
int main(void)
{
int array[ROW][COL];
int point[ROW][2];
init_array(array, ROW, COL);
init_point_array(point, ROW);
show_array(array, ROW, COL);
check_saddle_point(point, array, ROW, COL);
show_saddle_point(point, array, ROW);
return 0;
}
供參考~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94410.html
標籤:C語言
上一篇:ASP.NET
下一篇:python
