【題目描述】
輸入兩個整數n和m,輸出一個n行m列的矩陣,將數字 1 到 n*m 按斬訓字蛇形填充至矩陣中,
【輸入格式】
輸入共一行,包含兩個整數n和m,
【輸出格式】
輸出滿足要求的矩陣,
矩陣占n行,每行包含m個空格隔開的整數,
【資料范圍】
1≤n,m≤100

【題目分析】
由題意可知,該題可以建立一個二維陣列,將各個數字依次按照走位填充進去,而這個方向則是一個回圈,因此我們可以用x,y坐標來表示位置,用dx,dy來表示它們的變化值,很明顯當肥蛇轉彎時有兩種情況:
<1>x,y坐標越界
<2>🐍🐍吃到了自己的尾巴,數值重復!!!!(因為蛇蛇的邊界是會慢慢變小的)
代碼注釋:x以下為正,y以右為正,給🐍🐍設立一個起始狀態d=1,在這個狀態下蛇蛇水平往右橫沖直撞,也就是此時dx=0,dy=1,在遇到上述情況時變向,
【程式代碼】
#include <iostream>
using namespace std;
const int N=110;
int f[N][N];
int n, m;
int main()
{
cin >> n >> m;
int dx[]={-1, 0, 1, 0}, dy[]={0, 1, 0, -1};
int d = 1,x = 0,y = 0;
int a,b;
for(int i = 1; i <= n*m; i++ )
{
f[x][y] = i;
a = x + dx[d];
b = y + dy[d];
if(a < 0 || a>=n || b<0 || b>=m ||f[a][b] )
{
d = (d+1)%4;
a = x + dx[d];
b = y + dy[d];
}
x = a;
y = b;
}
for(int i = 0; i < n; i++ )
{
for(int j = 0; j < m; j++)
cout<<f[i][j]<<" ";
cout<<endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255305.html
標籤:其他
上一篇:AtCoder Beginner Contest 190 C Bowls and Dishes(暴搜)
下一篇:如何使用C++做個簡單推箱子游戲
