gpt4 book ai didi

c++ - 如何在二维数组中编写此模式?

转载 作者:行者123 更新时间:2023-12-03 07:01:07 25 4
gpt4 key购买 nike

我必须编写一个程序,在二维数组中显示以下模式:

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;
}

它适用于偶数输入,但将最后一个值作为奇数的垃圾。
\n
\n
输入
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;
}

关于c++ - 如何在二维数组中编写此模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59320392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com