链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
题目描述
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld题目背景:
ZYL最近迷上了机器人,看着机器人在赛道上跑来跑去,ZYL陷入了思考......
题目描述:
现在,操场上有n×n个机器人组成的方阵,每个机器人都有自己独一无二的编号i(1≤i≤n×n)。
现在,机器人教官想让他们排整齐,即第iii行第jjj列的机器人编号恰好等于(i−1)×n+j,但教官只能发出一种指令。
指令的内容:
让方阵最外周的机器人顺时针走动一位。
例如(教官喊了一次指令):教官可以发出这个指令任意次,请问教官能否让机器人方阵排整齐?
输入描述:
若能,输出YES,否则,输出NO输入的第一行包含一个正整数n(1≤n≤10)------代表这是一个n×n的方阵接下来n行,每行包含n个整数ai,j(1≤ai,j≤n×n)------代表原方阵中第i行第j列的机器人的编号
输出描述:输出共一行,YES或NO.示例1
输入2 1 2 3 4输出YES示例2
输入2 1 2 4 3输出NO找出最外层对角线规律,即a[1,1]和a[n,n]对应,其中i,j满足n+1且a[i,j]和a[n+1-i,n+1-j]的和等于n*n+1,然后逐个判断是否符合该规律即可
AC代码:
#includeusing namespace std; void solve(){ int n; cin >> n; int a[110][110]; bool flag = true; for(int i = 1;i <= n;i ++){ for(int j = 1;j <= n;j ++){ cin >> a[i][j]; if(a[i][j] != (i - 1) * n + j){ flag = false; } if(i != 1 && i != n && j != 1 && j != n){ if(a[i][j] != (i - 1 ) * n + j){ cout << "NO" << endl; return ; } } } } for(int j = 1;j <= n;j++){ if(a[1][j] + a[n][n + 1 - j] != n * n + 1){ flag = false; cout << "NO" << endl; return; } } for(int i = 1;i <= n;i ++){ if(a[i][1] + a[n + 1 - i][n] != n * n + 1){ flag = false; cout << "NO" << endl; return; } } if(flag){ cout << "YES" << endl; return ; } else{ cout << "NO" << endl; return ; } return; } int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); solve(); return 0; }



