机器人(广东竞赛)

机器人(广东竞赛),第1张

机器人(广东竞赛)

题目背景:
ZYL最近迷上了机器人,看着机器人在赛道上跑来跑去,ZYL陷入了思考......
题目描述:
现在, *** 场上有n×nntimes nn×n个机器人组成的方阵,每个机器人都有自己独一无二的编号i(1≤i≤n×n)i(1le i le n times n)i(1≤i≤n×n)。
现在,机器人教官想让他们排整齐,即第iii行第jjj列的机器人编号恰好等于(i−1)×n+j(i-1) times n+j(i−1)×n+j,但教官只能发出一种指令。
指令的内容:
让方阵最外周的机器人顺时针走动一位。
例如(教官喊了一次指令):
 

教官可以发出这个指令任意次,请问教官能否让机器人方阵排整齐?
若能,输出YES,否则,输出NO
 

输入描述:
输入的第一行包含一个正整数n(1≤n≤10)n(1≤ n ≤10)n(1≤n≤10)------代表这是一个n×nntimes nn×n的方阵

接下来nnn行,每行包含nnn个整数ai,j(1≤ai,j≤n×n)a_{i,j}(1 le a_{i,j} le n times n)ai,j​(1≤ai,j​≤n×n)------代表原方阵中第iii行第jjj列的机器人的编号

输出描述:
 输出共一行,YES或NO.

示例1

输入

复制2 1 2 3 4

2
1 2
3 4
输出

复制YES

YES

示例2

输入

复制2 1 2 4 3

2
1 2
4 3
输出

复制NO

NO

 这题的关键在于如何外围循环,我是先将第一行向右移,再将最后一行往左移,在第一列,第n列移一下,你会发现在移动的过程中有两个值会被覆盖,需特别注意,之后就好做啦,话不多说,上代码。

#include 

using namespace std;

int main()
{
int n;
cin >> n;
int a[n+2][n+2];
int i,k,j;
int x,y,z,m;
for(i=1;i<=n;i++)
{
    for(k=1;k<=n;k++)
    {
        cin >> a[i][k] ;
    }

}
int s=0;
for(j=0;j<=n+1;j++)      // 外围好像要循环至少n次
{


 for(i=1;i<=n;i++)
    {
        for(k=1;k<=n;k++)
        {
            if(a[i][k]!=(i-1)*n+k) // 判断初次输入的是否正确
                {s=1;

                }
        }
    }
    if(s==0)
        {

            cout << "YES" <=1;k--)
           {
               a[1][k+1]=a[1][k];
           }
       }
       if(i==n)
       {
           for(k=1;k<=n;k++)
           {
               a[n][k-1]=a[n][k];
           }
       }

    }


    for(i=1;i<=n;i++)
    {
       if(i==1)
       {
           for(k=1;k1;k--)
           {
               a[k+1][n]=a[k][n];
           }
       }

    }


    a[2][n]=y;   // 这就是被覆盖的值,再重新赋
    a[n-1][1] =z;

    for(i=1;i<=n;i++)
    {
        for(k=1;k<=n;k++)
        {
            if(a[i][k]!=(i-1)*n+k) // 开始检测循环后的正确性
                {s=1;

                }
        }
    }
    if(s==0)
        {

            cout << "YES" < 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5634715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存