【发布时间】:2026-01-19 14:00:01
【问题描述】:
任务是用数字从 1 开始的螺旋形填充两个维度数组 [N][M]。
当元素之一(N 或 M)为奇数或两者均为奇数时,我的代码不起作用。 当我使用两个不同的偶数或两个相同的偶数时,它会起作用。
我需要帮助才能做到这一点,因此它在任何情况下都可以使用任何 N 和 M。
附言请保留我的代码(不要制作动态数组,保留定义等)
#include <iostream>
#define N 6
#define M 4
int nums = 1;
int p = 1;
int arr[N][M];
using namespace std;
void printArr(){
for (int i = 0; i < N; i++){
for (int j = 0; j < M; j++){
cout << arr[i][j] << "\t";
}
cout << endl;
}
}
void circle (int k){
// levo pravo
for (int i = 0+k; i < M-k; i++){
arr[N-N+k][i] = nums;
nums++;
}
// verh niz
nums--;
for (int i = 0+k; i < N-k; i++){
arr[i][M-1-k] = nums;
nums++;
}
// pravo levo
nums--;
for (int i = M-p; i >= 0+k; i--){
arr[N-1-k][i] = nums;
nums++;
}
// niz verh
nums--;
for (int i = N-p; i > 0+k; i--){
arr[i][0+k] = nums;
nums++;
}
p++;
}
int main(){
if (M<N){
for (int k = 0; k < M/2; k++){
circle(k);
}
} else {
for (int k = 0; k < N/2; k++){
circle(k);
}
}
printArr();
return 0;
}
【问题讨论】:
-
“不起作用”是什么意思?你能描述一下你观察到的问题吗? It seems to work here 其中
N是5。 -
“其中一个元素”很奇怪:你的意思是 N 还是 M 之一?
-
是的,抱歉,“N 或 M 是奇数”
-
@DrewDormann 例如尝试 5 和 7。
-
for (int k = 0; k < M/2; k++)-->for (int k = 0; k < (M+1)/2; k++)(main中的其他循环相同)