以下是引用wp231957在2015-9-8 10:19:15的发言:
还应该有限制条件 比如 两两不等
是的,那就简单了。
但在实际应用场合中,这个条件很难满足,我写个玩玩
程序代码:
#include <windows.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdbool.h>
int printf_color( WORD wAttr, const char * format, ... )
{
HANDLE h = GetStdHandle( STD_OUTPUT_HANDLE );
CONSOLE_SCREEN_BUFFER_INFO csbf;
GetConsoleScreenBufferInfo( h, &csbf );
WORD wAttr_old = csbf.wAttributes;
SetConsoleTextAttribute( h, wAttr );
va_list argptr;
va_start( argptr, format );
int n = vprintf( format, argptr );
va_end( argptr );
SetConsoleTextAttribute( h, wAttr_old );
return n;
}
#define printf_red( fmt, ... ) printf_color( FOREGROUND_RED|FOREGROUND_INTENSITY, fmt, __VA_ARGS__ )
void highlight_saddlepoint( const int* matrix, size_t row, size_t col )
{
for( size_t r=0; r!=row; ++r )
{
int rmax = INT_MIN;
for( size_t c=0; c!=col; ++c )
rmax = rmax>matrix[r*col+c] ? rmax : matrix[r*col+c];
for( size_t c=0; c!=col; ++c )
{
if( matrix[r*col+c] != rmax )
printf( "\t%d", matrix[r*col+c] );
else
{
bool iscmin = true;
for( size_t i=0; i!=row && iscmin; ++i )
if( matrix[r*col+c] > matrix[i*col+c] )
iscmin = false;
if( !iscmin )
printf( "\t%d", matrix[r*col+c] );
else
printf_red( "\t%d", matrix[r*col+c] );
}
}
printf( "\n" );
}
}
#define hlspmatrix(mtx) highlight_saddlepoint( *mtx, sizeof(mtx)/sizeof(mtx[0]), sizeof(mtx[0])/sizeof(mtx[0][0]) )
int main( void )
{
int a[][4] = { 1, 2, 13, 4,
7, 8, 10, 6,
3, 5, 9, 7 };
hlspmatrix( a );
printf( "%s\n", "-----------------------------------" );
int b[][4] = { 1, 2, 1, 2,
1, 2, 1, 2,
1, 3, 1, 2 };
hlspmatrix( b );
return 0;
}
输出
1
2
13
4
7
8
10
6
3
5
9 7
-----------------------------------
1
2 1
2
1
2 1
2
1
3
1
2
@林月儿,到饭点儿了,没仔细看你的代码
楼主要的是,在行中最大,在列中最小;而非 行中最大的值中的最小值
说错了别怪