题目描述
创建一个函数来确定每个座位是否可以“看到”前台。如果一个数字严格大于它之前的数字,它就可以“看到”前台。
大家可以在下面的例子中看到前台:
# FRONT STAGE
[[1, 2, 3, 2, 1, 1],
[2, 4, 4, 3, 2, 2],
[5, 5, 5, 5, 4, 4],
[6, 6, 7, 6, 5, 5]]
# 从左边开始,6 > 5 > 2 > 1,所以所有的数字都可以看到。
# 6 > 5 > 4 > 2 - 所以所有数字都可以看到,等等。
不是每个人都能在下面的示例中看到前台:
# FRONT STAGE
[[1, 2, 3, 2, 1, 1],
[2, 4, 4, 3, 2, 2],
[5, 5, 5, 10, 4, 4],
[6, 6, 7, 6, 5, 5]]
# 10 就在 6 的正前方,挡住了它的视线。
输入输出格式
输入格式
第一行 N 表示循环次数。
第二行则是矩阵中的行,每个元素用一个空格隔开。
输出格式
字符串格式即可。
输入输出样例1
输入
3
1 2 3
4 5 6
7 8 9
输出
True
解释
True 表示每个数字都可以看到前台,则该函数应该返回,False 即使单个数字也不能。
输入输出样例2
输入
3
2 0 0
1 1 1
2 2 2
输出
False
输入输出样例3
输入
3
1 0 0
1 1 1
2 2 2
输出
False
说明提示
数字必须严格大于它前面的数字。
矩阵中的所有数字都是大于或等于零的整数。
思路解析:
看到这道题大部分人的思路应该是先创建好矩阵来存储n*n个元素的信息,然后定义一个函数来确定是否每个元素比在本列之前行的数值要大,具体做法到了现在估计大家也都很熟悉了,接下来我带来一个不同的做法,如果仅仅是为了解决这道题而不是开发什么项目的话,我们完全没必要中规中矩的执行每一个步骤,我们可以在输入数据的同时进行判断,每输入一个元素都要去和同一列先前行的元素逐一比较。
具体代码:
#include<stdio.h>
int main(void)
{
int n;
int arr[100][100] = { 0 };
scanf("%d", &n);
int flag = 1;//如果发现某一个元素先前行同一列的元素等于或者比自己大就为0,否则为1。
for(int i = 0;i<n&&flag;i++)//注意flag也是判断条件
for (int j = 0; j < n&&flag; j++)
{
scanf("%d", &arr[i][j]);
if(i)//如果行数不为0,执行下面循环。(因为第0行没有先前行)
for(int k = i-1;k>=0;k--)
if (arr[k][j] >= arr[i][j])//如果发现比自己大的元素
{
flag = 0;
break;
}
}
if(flag)
printf("True");
else
printf("False");
}
注意:
实际上在开发过程中我是完全不建议大家来做的,接触过缓存区的同学应该明白为什么,以这题为例,由于自己可能输入很多的数据,但是并不是每一个数据都会使用,没有使用的数据可能会造成安全隐患,假如你要在代码最后给一个变量赋值为88,如果你使用的是“输入输出样例3”的话,因为第二行没有完全使用,该变量会赋值为1。