(C++题目)
题目描述:
在数字矩阵中,存在着一种名叫贪吃蛇矩阵的结构,它的原理是这样的:矩阵固定从最左上角开始且一定为1,依次向后赋值,每一次赋值的数都比上一次多1。当前行赋值完毕以后,反向顺序赋值下一行,重复这个步骤,直到矩阵赋值完成。此时的矩阵称为贪吃蛇矩阵。现请你设计一个程序,输入贪吃蛇矩阵的长和宽,输出这个贪吃蛇矩阵。
输入描述
1行,包含2个数n,m,代表贪吃蛇矩阵的长和宽。
输出描述
n行,每行包含m个数,代表贪吃蛇矩阵中的每一个数。
输入样例:
3 3
输出
1 2 3
6 5 4
提示
对于100%的数据,3<=n,m<=50。
运用知识点:二维数组
求本题中输出的思路!
(此题和网上的贪吃蛇矩阵不太一样,网上的是(螺旋矩阵):
1 2 3
8 9 4
7 6 5
而本题是(贪吃蛇(叠加S形)矩阵:
1 2 3
6 5 4
7 8 9
)
本人只能编到这里了:
#include
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
int ans = 1,cnt = 0;
int a[n][m];
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
if(cnt == n || cnt == m)
{
break;
}
a[i][j] = ans;
ans++;
cnt++;
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
(编辑器:Dev-C++ 5.11)
你可以设一个k,如果是单数行那么k=1,如果是单数行那么k=-1,然后每次让横坐标加k。
代码:
#include <bits/stdc++.h>
using namespace std;
int k=1,x,n,m,s=1,a[1000][1000];
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
x+=k;
a[i][x]=s;
s++;
}
x+=k;
k*=-1;//单数为1,双数为-1
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++)cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
可能有点复杂,但还是求题主点个采纳+关注~
谢谢各位,本人已经做出来了:
#include <iostream>
using namespace std;
int main()
{
int a[60][60],cnt = 1;
bool flag = true;
for (int i = 0;i < n;i++)
{
if(flag == true)
{
for (int j = 0;j < m;j++)
{
a[i][j] = cnt;
cnt++;
}
}
else
{
for (int j = m-1;j > -1;j--) //等价于for (int j = m-1;j >= 0;j--)
{
a[i][j] = cnt;
cnt++;
}
}
flag = (!flag);
}
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: