标签:02 include 201412 一步 int 走法 矩阵 flag ccf
题目描述
解题思路
方法一:铁头模拟题目中那个路线的规律,记录上一步是怎么走的,判断下一步该如何走(例如:上一步是横,下一步是左上或右下;上一步是左下,下一步是左下或下或横)用if判断下一步该如何走,这种方法我试过,可解,只是稍微有些繁琐
方法二:寻找更一般的规律
以4 x 4的矩阵为例
- 首先将矩阵左边和下面补充等大矩阵
- 不看题目中横的和向下的路线,就会发现其实就是在走对角线的格子,而且只有两种走法,一种左下,一种右上
所以得到的解法是,用一个标记flag标记当前的走法,当判断越界时,进行x = 0 / y = 0 进行调整 并更换走法,并且只有当该点在黑方格区域内才将该点输出,当走到(n, n)时结束
代码实现
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
int n;
int a[N][N];
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= n; j ++)
{
cin >> a[i][j];
}
}
int x = 1, y = 1;
bool flag = true; // flag 为true表示右上
while(x != n || y != n) //当遍历到a[n][n]时结束循环
{
if(x >= 1 && x <= n && y >= 1 && y <= n) 当该点在区域内
{
cout << a[x][y] << " ";
}
if(flag) //右上走法
{
x --; y ++;
}
else
{
x ++; y --;
}
if(x < 1) //边界为 1~n;当x < 1时越界
{
x = 1;
flag = !flag;
}
if(y < 1)
{
y = 1;
flag = !flag;
}
}
cout << a[n][n]; //跳出循环后,输出最后一个数字
return 0;
}
标签:02,include,201412,一步,int,走法,矩阵,flag,ccf 来源: https://blog.csdn.net/qq_51800570/article/details/122635511
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。