使用C++输出螺旋方阵
问题描述:
使用C++实现输出螺旋方阵,已运行就出错,求解答!
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
int number[1000][1000] = {0}, start = 1, turn_right = 0, turn_down = 0;
void run(int num) { //此参数作为螺旋方阵边长
int temp_long = num;
// memset(number, 0, sizeof(number));
for (int icircle = 0; icircle < num / 2; icircle++) {
for (; turn_right < temp_long - 1; turn_right++) { //从左到右
number[turn_down][turn_right] = start++;
cout << number[turn_down][turn_right] << endl;
}
for (; turn_down < temp_long - 1; turn_down++) { //从上到下
number[turn_down][turn_right] = start++;
}
for (turn_right = temp_long - 1; turn_right > icircle;
turn_right--) { //turn_right定位到本圈本行末尾,icircle的值为本圈第一个元素的下标
number[turn_down][turn_right] = start++;
}
for (turn_down = temp_long - 1; turn_down > icircle; turn_down--) {
number[turn_down][turn_right] = start++;
}
turn_down--;
temp_long--;
start--;
}
if (num % 2 == 1) {
number[turn_down][turn_right + 1] = start++;
}
for (int i = 0; i < num; i++) {
for (int i2 = 0; i2 < num; i2++) {
cout << setw(2) << number[i][i2];
}
cout << endl;
}
}
int main() {
int size;
cout << "请输入螺旋方阵边长:";
cin >> size;
run(size);
return 0;
}
答
问题找到了。如果解决,点个采纳吧!
问题一:
当最后执行完这条语句时,
for (turn_down = temp_long - 1; turn_down > icircle; turn_down--) {
number[turn_down][turn_right] = start++;
}
此时turn_down已经是0了;然后下面你在对他进行turn_down--;操作,索引就变成负数了,导致数组越界报错。
解决办法:turn_down++;改成++操作。
问题二:
这个//start--;需要注释掉。不然无法达到螺旋效果。
void run(int num) { //此参数作为螺旋方阵边长
int temp_long = num;
// memset(number, 0, sizeof(number));
for (int icircle = 0; icircle < num / 2; icircle++) {
for (; turn_right < temp_long - 1; turn_right++) { //从左到右
number[turn_down][turn_right] = start++;
cout << number[turn_down][turn_right] << endl;
}
for (; turn_down < temp_long - 1; turn_down++) { //从上到下
number[turn_down][turn_right] = start++;
}
for (turn_right = temp_long - 1; turn_right > icircle; turn_right--) { //turn_right定位到本圈本行末尾,icircle的值为本圈第一个元素的下标
number[turn_down][turn_right] = start++;
}
for (turn_down = temp_long - 1; turn_down > icircle; turn_down--) {
number[turn_down][turn_right] = start++;
}
turn_down++; // 改成++操作
temp_long--;
//start--; // 注释掉
}
if (num % 2 == 1) {
number[turn_down][turn_right + 1] = start++;
}
for (int i = 0; i < num; i++) {
for (int i2 = 0; i2 < num; i2++) {
cout << setw(2) << number[i][i2] << "\t";
}
cout << endl;
}
}
答
把错误信息贴出来看看,更好分析原因。
答
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
答
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y