C语言练习——鞍点

来源:互联网 发布:程序员年龄大了没出路 编辑:程序博客网 时间:2024/04/27 20:14

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[n][n];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;}

思考:这一周学的是数组,没有以前的代码写起来那么容易了,调试了好几次才通过。而且有一点感触的是,注释很重要,如果不加注释,随便写代码,过后再看代码,不要说别人了,自己也看不懂啊。而且写注释,能让自己的思路更加清晰直观,代码出错调试起来也方便快捷。

0 0
原创粉丝点击