算法成长之路------ CF16A Flag

学习目标:算法学习-Day14

题库: 洛谷题库
每天保持发布一篇Java或C算法题解!

题目
According to a new ISO standard, a flag of every country should have a chequered field n×mn×m , each square should be of one of 10 colours, and the flag should be «striped»: each horizontal row of the flag should contain squares of the same colour, and the colours of adjacent horizontal rows should be different. Berland’s government asked you to find out whether their flag meets the new ISO standard.
根据一项新的 ISO 标准,每一个国家的国旗应该是一个 n×m 的格子场,其中每个格子最多有 10种不同的颜色。并且国旗应该有条纹:旗帜的每一行应包含相同颜色的方块,相邻的行的颜色应该是不同的。Berland 政府要求你找出他们的国旗是否符合新的 ISO 标准。
输入格式:

输入的第一行包含数 n 和 m,其中 n 为行数,m 为列数。

接下来是对旗的描述:以下 n 行中的每一行包含 m 个字符。每个字符是 0 到 9 之间的数字,代表相应正方形的颜色。
输出格式:

如果国旗符合标准就输出 YES,否则输出 NO。

样例 1 :

输入:
3 3
000
111
222


输出:
YES


样例 2 :

输入:
3 3
000
000
111


输出:
NO


样例3:

输入:
3 3
000
111
002


输出:
NO


思路:

	根据题目,定义一个n✖m的数组,遍历数组,根据条件来判断是否符合题目要求
	条件:
		1.一行的每个元素都必须是相同的
		2.行与行之间不能相同
	于此可以定义一个布尔型的变量flag = true,当符合时输出“YES”,反之输出“NO”
	整型数组和char数组都可以,因为行中的每个字符都是0-9的数字,但整数数组中的元素需要转为char型

习题总结及反思:

	题目读完思路清晰,跟之前的有几道题思路都差不多,都是循环一个既定大小的数组
	只是条件不同罢了
	刚开始没定义一个布尔型变量来进行判断
	就导致必须在循环外写一个输出语句表示“YES”
	这样的话,控制台始终会显示有“YES”这个答案!

代码如下:

import java.util.*;
public class Main {
	public static void main(String[] args) {
			Scanner input = new Scanner(System.in);
			int n = input.nextInt(); 
			int m = input.nextInt();
			int[][] a = new int[n][m];
			boolean flag = true;
			//行遍历
			for(int i = 0;i < n ; i ++){
				//一行一行的输入
				String s = input.next();
				//列遍历
				for(int j = 0 ; j < m ; j ++){
					//每个元素都是0-9的字符
					a[i][j] = s.charAt(j)-'0';
					//如果不是第一个元素且上下两行一样则false
					if(i!=0){
						if(a[i][j]==a[i-1][j]){
							flag = false;
							break;
						}
					}
					//如果不是第一个元素且一行的每个元素不一样则false
					if(j!=0){
						if(a[i][j]!=a[i][0]){
							flag = false;
							break;
						}
					}
				}
			}
			//flag = true 则说明符合题目要求
			if(flag) 
				System.out.println("YES");
			else 
				System.out.println("NO");
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值