如何在 2D 数组中编写此模式?
How to write this pattern in 2D array?
我必须编写一个在 2D 数组中显示以下模式的程序:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
我的代码:
#include <iostream>
#include<iomanip>
using namespace std;
#define SIZE 5
int main()
{
int i, j, n, x;
int array[SIZE][SIZE];
int left, top;
left = 0;
n = 1;
cout<<"Enter dimension of array pattern:";
cin>>x;
while(x<1||x>6){
cout<<"Invalid entry. Enter a number greater than 0 and less than 6";
cin>>x;
}
top = x-1;
for(i=1;i<=x/2;i++,left++,top--){
for(j=left;j<=top;j++,n++)
array[left][j]=n;
for(j=left+1;j<top;j++,n++)
array[j][top]=n;
for(j=top;j>left;j--,n++)
array[top][j]=n;
for(j=top;j>left;j--,n++)
array[j][left]=n;
}
for(i=0; i<x; i++)
{
for(j=0; j<x; j++)
{
cout<<setw(3)<<array[i][j];
}
cout<<endl;
}
system("pause");
return 0;
}
它适用于偶数输入,但将最后一个值作为奇数的垃圾给出。 输入
5
输出
1 2 3 4 5
16 17 18 19 6
15 24700383242 20 7
14 23 22 21 8
13 12 11 10 9
任何帮助将不胜感激。
对于奇数,您永远不会更改中心值,因此它将未初始化。然后读出它是未定义的行为,通常表现为获取垃圾值。您可以通过扩展循环以在该中心字段上运行来修复它:
for (i = 1; i <= (x / 2)+1; i++, left++, top--) {
或者,由于很容易弄清楚它将具有什么值,因此您可以在循环后手动填充它:
if (x%2 == 1)
array[x/2][x/2] = x * x;
另外,当用户输入无效号码时,不要忘记读取新号码:
while (x < 1 || x>6) {
cout << "Invalid entry. Enter a number greater than 0 and less than 6";
cin >> x;
}
相关文章:
- 2D数组来自文本输入,中间有空格
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 如何在C++中检查2D数组中负值的输入验证
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 此模式的C++RegEx
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用可变模板的Broadcaster/Listener模式
- 四边形的 2D 旋转
- c++方法参数只能在linux的发布模式下自行更改
- 打印第二列时的2d字符矢量打印空间
- 如何在 2D 数组中编写此模式?
- 通过2D阵列C 移动锯齿ZAG模式的数字
- 将1d矩阵模式设置为等于2d矩阵