您的位置:首页 > 编程语言 > C语言/C++

C语言练习——鞍点

2016-12-01 09:47 357 查看

C语言练习——鞍点

题目出自“中国大学MOOC”翁恺老师《程序设计入门——C语言》第七周编程练习第二题

以下为题目要求:
给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。

你的任务是找出A的鞍点。

输入格式:

输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。

输出格式:

对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。

如果找不到,就输出

NO

题目所给的数据保证了不会出现多个鞍点。

输入样例:



1 7 4 1 

4 8 3 6 

1 6 1 2 

0 7 8 9

输出样例:

2 1

时间限制:500ms内存限制:32000kb

以下为博主给出的代码,仅供参考:

//寻找一个方形矩阵的鞍点(saddle point)
#include <stdio.h>

int main(){
//读入一个数字,决定这个方形矩阵是几阶的
int n;
scanf("%d",&n);

//定义n阶矩阵以及将要用到的变量
int matrix

;
int i,j,temp,count,flag=0;

//读入矩阵中的每一个数
for(i=0; i<n; i++){
for(j=0; j<n; j++){
scanf("%d",&temp);
matrix[i][j]=temp;
}
}

//测试读入的数据是否正确
/*	{
for(i=0; i<n; i++){
printf("%d\t",i);
for(j=0; j<n; j++){
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
}
*/
//开始寻找鞍点
for(i=0; i<n; i++){
//找出每行中的最大的数字
temp=matrix[i][0];	//用temp与count标识出每行中最大的数字以及位置
count=0;
for(j=1; j<n; j++){
if(temp<matrix[i][j]){
temp=matrix[i][j];
count=j;
}
}
//测试一下,此行最大的数字,是否是其所在列的最小数字
for(j=0;j<n;j++){
if(matrix[j][count]<temp){
flag++;	//如果有数字小temp,flag就不为零
}
}
if(flag==0){	//测试flag值,如果为零,证明此数正是要找的鞍点
printf("%d %d\n",i,count);
break;
}
flag=0;
}
//如果没找到鞍数,循环终止,输出“NO”
if(i==n){
printf("NO");
}
return 0;
}


思考:这一周学的是数组,没有以前的代码写起来那么容易了,调试了好几次才通过。而且有一点感触的是,注释很重要,如果不加注释,随便写代码,过后再看代码,不要说别人了,自己也看不懂啊。而且写注释,能让自己的思路更加清晰直观,代码出错调试起来也方便快捷。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息