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
题目所给的数据保证了不会出现多个鞍点。
输入样例:
4
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; }
思考:这一周学的是数组,没有以前的代码写起来那么容易了,调试了好几次才通过。而且有一点感触的是,注释很重要,如果不加注释,随便写代码,过后再看代码,不要说别人了,自己也看不懂啊。而且写注释,能让自己的思路更加清晰直观,代码出错调试起来也方便快捷。
相关文章推荐
- C语言之基本算法32—鞍点
- 李洪强漫谈iOS开发[C语言-043]-练习
- C语言练习_20180219_2
- c语言小程序练习
- C语言练习-1类型转换
- 练习用规范的语句写C语言和shell
- 【C语言练习】3.0
- C语言小练习9
- 第04天C语言(06):while练习1
- C语言编程(练习4:字符输入和输出 )
- 第07天C语言(03):数组练习1
- Python练习13----类似C语言的条件运算符?:
- 4000 寒假编程练习(一)(c语言)
- 【LeetCode算法练习(C语言)】Add Two Numbers
- C语言之多维数组简单题目练习
- C语言练习——念整数
- C语言字符串练习1
- 逆向还原C语言代码 练习1
- C语言练习1
- C语言练习stack