C语言 良乡足球场 割草机问题
来源:互联网 发布:皮尔斯生涯数据 编辑:程序博客网 时间:2024/05/01 05:28
题目要求
良乡足球场有着优质的草坪,为了进一步美化草坪,学校体育部计划使用割草机对草坪进行修剪,进而得到多种多样的图案。由于割草机只能横向或竖向割草,且每次割草都会预先设定高度,割完后会把比设定高度高的草都割成设定的高度。
假设足球场中有一个 n * m 的草坪 (1<=n, m<=100),草坪中的草初始高度均为100。现给出一个图案,请通过编程判断割草机是否可以割出想要的图案。
输入
第一行包含两个整数 n 和 m。
接下来为 n 行输入,每行包含 m 个不大于100的正整数。
输出
如果可以修剪成输入的图案,则输出“YES”,否则输出“NO”。
第一种方案:
每次新建一个全为100的数组num2,每次找到输入数组num的行列最大,然后让num2数组按行列最大锄草,最后判断锄草后的数组num2是否和要求数组num相同
代码如下:
#include#define N 100int main(int argc, const char * argv[]) { int m,n,i,j,num[N][N]; while(scanf("%d%d",&n,&m)!=EOF){ int maxC[N],maxR[N],num2[N][N]; memset(maxC,0,sizeof(maxC)); memset(maxR,0,sizeof(maxR)); int flag = 1; for (i = 0; i < n; i ++) { for (j = 0; j < m; j++) { scanf("%d",&num[i][j]); if (num[i][j] > 100) { flag = 0; } num2[i][j] = 100; //找到列最大 maxC[j] = maxC[j] > num[i][j]?maxC[j]:num[i][j]; //找到行最大 maxR[i] = maxR[i] > num[i][j]?maxR[i]:num[i][j]; } } for (i = 0; i < n; i++) { for (j = 0;j < m; j++) { //列(行)锄草,高于列(行)最大的变为列(行)最大,低于的不变 num2[i][j] = num2[i][j] > maxC[j]?maxC[j]:num2[i][j]; num2[i][j] = num2[i][j] > maxR[i]?maxR[i]:num2[i][j]; } } //判断锄草后的草是否和要求的草相等 for (i = 0; i < n; i++) { for (j = 0;j < m; j++) { if(num[i][j] != num2[i][j]){ flag = 0; } } } if (flag == 1) { printf("YES\n"); }else{ printf("NO\n"); } } return 0;}
第二种方案:
每次找到输入数组num的行列最大,直接判断数组里的每一个数是否是该行最大和该列最大的最小值。(可以证明每个数不是是该行最大就是该列最大,且为这两个最大的较小那个值)
0 0
- C语言 良乡足球场 割草机问题
- 6. 良乡足球场
- 割草机
- 割草机
- Wannafly挑战赛4 C 割草机
- Wannafly挑战赛4 C 割草机
- 牛客网Wannafly挑战赛4 C.割草机(模拟)
- wannafly挑战赛4 C-割草机 思维
- Wannafly 挑战赛 4 C 题 割草机 【模拟】
- wannafly挑战赛4C-水题&思维-割草机
- newCoder Wannafly挑战赛4:C 割草机
- Wannafly挑战赛4 C割草机 模拟
- Wannafly挑战赛4,C题割草机,(模拟)
- 足球场记事
- C语言的问题
- C语言指针问题
- C语言问题一则
- c语言问题
- static 关键字
- easyui重置按钮的三种方法
- UIFont 设置字体
- 读取文件夹里面的图片生成对应的txt
- 浅谈C中的malloc和free
- C语言 良乡足球场 割草机问题
- 解决ehcache的UpdateChecker问题
- 电脑忘记密码怎么办的解决方法
- C语言宏定义用do{}while(0)的情况
- 迷宫游戏 51Nod
- 基于Dragonboard 410c的PMIC简介
- Spring Boot Rest Service 下载文件
- C++ static类成员
- 欢迎使用CSDN-markdown编辑器