iT邦幫忙

0

請問大神要怎麼把二維陣列丟入副程式裡執行,以這裡為例。

#include <stdio.h>
#include <stdlib.h>
int N;
void function(int array[][],int k){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
array[k][l]=k;
k++;
}
}
}

int main(){

scanf("%d",&N);
int square[N][N]={0};

function(&square,1);

int k,l;
for(k=0;k<N;k++){
	for(l=0;l<N;l++){
		printf("%2d ",square[k][l]);
	}
	printf("\n");
}

}

想把迭代轉遞迴但二維陣列傳入副程式格式不知道怎麼用卡住了。這篇只是在試用法。
#include <stdio.h>
#include <stdlib.h>

int main(){
int N;
printf("輸入魔方邊長:");
scanf("%d",&N);

int square[N][N]={0};
int i=-1,j=(N-1)/2;
int num;

for(num=1;num<=N*N;num++){
if((num % N) == 1){
i++;
}
else {
i--;
j++;
}
if(j>N-1){
j=0;
}
if(i<0){
i=N-1;
}
square[i][j]=num;
}

int k,l;

for(k=0;k<N;k++){
for(l=0;l<N;l++){
printf("%2d ",square[k][l]);
}
printf("\n");
}
}
這是迭代的樣子。
#include <stdio.h>
#include <stdlib.h>
int N;

void function(int array[][],int k,int n,int m){
if(k>N*N){
return;
}
else{
int i=n,j=m;
if((k%N)==1){
i++;
}
else{
i--;
j++;
}

if(j>N-1){
j=0;
}
if(i<0){
i=N-1;
}
array[i][j]=k;

function(array,k+1,i,j);
}
}

int main(){

while(1){
printf("輸入5~9的奇數:");
scanf("%d",&N);
if(N>9 || N<5 || N%2==0){
printf("\n不符合規定的輸入。\n\n");
}
else{
break;
}
}
int square[N][N]={0};

function(square,1,-1,(N-1)/2);

int k,l;
for(k=0;k<N;k++){
for(l=0;l<N;l++){
printf("%2d ",square[k][l]);
}
printf("\n");
}


}
這是遞迴的樣子。

尚未有邦友回答

立即登入回答