CSDN 四川大学线下编程比赛第二题:Peter的X

CSDN 四川大学线下编程比赛第二题:Peter的X

大家好,又见面了,我是全栈君。

题目详情:

http://student.csdn.net/mcs/programming_challenges

Peter是个小男孩。他总是背不清26个英文字母。

于是,刁钻的英语老师给他布置了一个很奇怪的作业。老师给了他一个由26个英文字母构成的N*N 的矩阵(我们保证N一定是一个奇数),问他这个矩阵构成的图案是否是一个标准的“X”。

一个标准的X的定义:1、对角线上全部元素都是同一个字母。2、全部非对角线上的元素也都是同一个字母。且字母与对角线上的字母不同。

假设是则输出“YES”。否则输出“NO”。

输入描写叙述:

多组測试数据(数据量在100组以内)。每组測试数据第一行为一个整数N(1<=N<=300),表示表格的大小。

以下是N行是一个由字母构成的N*N的矩阵。

输出描写叙述:

对于每组输入数据,输出一行“YES”或“NO”。


输入例子:

5

xooox

oxoxo

soxoo

oxoxo

xooox

3

wsw

sws

wsw

3

xpx

pxp

xpe

输出例子:

NO

YES

NO

题目分析:

简单的模拟推断题,首先推断主对角线。然后推断副对角线,之后推断其它位置,最后推断对角线的元素是否和其它位置的元素一样。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[303][303];
int JudgeX(int n){
    if(n==1) return 1;
    char c1=a[1][1],c2;
    for(int i=1;i<=n;i++){//推断主对角线
        if(a[i][i]!=c1) return 0;//不是
    }
    for(int i=1;i<=n;i++){//推断副角线
        if(a[i][n+1-i]!=c1) return 0;//不是
    }
    c2=a[1][2];
    for(int i=1;i<=n;i++){//其它
        for(int j=1;j<=n;j++){
            if(i!=j&&(i+j)!=(n+1)){
                if(a[i][j]!=c2) return 0;
            }
        }
    }
    if(c1==c2) return 0;//别忘了不能相等了
    return 1;
}
int main()
{
    int n;
    while(cin>>n){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin>>a[i][j];
            }
        }
        if(JudgeX(n)) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116492.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 彩色图和深度图转点云

    彩色图和深度图转点云环境:windows10、VS2013、opencv2.49、openNi、PCL1.8opencv环境搭建参考https://www.cnblogs.com/cuteshongshong/p/4057193.htmlhttps://blog.csdn.net/u013105549/article/details/50493069PCL1.8+openNi搭建参考https://blog.cs…

    2022年4月25日
  • python 两个list 求交集,并集,差集

    python 两个list 求交集,并集,差集在python中,数组可以用list来表示。如果有两个数组,分别要求交集,并集与差集,怎么实现比较方便呢?当然最容易想到的是对两个数组做循环,即写两个for循环来实现。这种写法大部分同学应该都会,而且也没有太多的技术含量,本博主就不解释了。这里给大家使用更为装bility的一些方法。老规矩,talkischeap,showmethecode#!/usr/bin/envpython#

    2022年6月21日
  • python下载步骤-python安装教程详解|python下载安装教程步骤「建议收藏」

    python下载步骤-python安装教程详解|python下载安装教程步骤「建议收藏」Python是现在最受欢迎的编程语言,使用Python开发软件应用效率极高,相比其它语言有不可比拟的优势,Python是一种跨平台的计算机程序设计语言。免费开源、最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发,它是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,今天小编分享的是Windows下安装python教…

    2022年5月20日
  • vue双向绑定原理 面试_vue首屏加载优化

    vue双向绑定原理 面试_vue首屏加载优化vue.js采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我…

    2022年10月17日
  • out of sync with file system

    out of sync with file system

    2021年7月15日
  • vim复制粘贴_vim如何复制粘贴

    vim复制粘贴_vim如何复制粘贴一、打开文件        执行vimtest命令打开test文件        在命令模式下输入setnu,展示文本行号二、按字符复制与粘贴        在命令行模式下输入字符v(小写),便可以进入按字符选择模式,通过h、i、j、k键移动光标选择要进行复制的字符串。        完成选择后按下y键进行复制,将鼠标移动到最后一行,按下p执行粘贴操作就完成了对选择…

    2022年4月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号