c語言列印螺旋矩陣的流程圖,c語言輸出螺旋矩陣

本文目錄一覽:

一個5×5的螺旋矩陣如下所示,C語言編寫程序輸出N x N的螺旋矩陣 (N

個人程度還不夠好啊,寫了好長才寫出來,。:

#includestdio.h

#define

MAX

500

main()

{

int

i=0,j=0,a[MAX][MAX]={0},n,number=1,mod=1;

printf(“輸入階數\n”);

scanf(“%d”,n);

getchar();

do

{

if(a[i][j]==0)

{

a[i][j]=number;

number++;

}

if(mod==1)

{

if(jn-1a[i][j+1]==0)

j++;

else

{

i++;

mod=2;

}

}

else

if(mod==2)

{

if(in-1a[i+1][j]==0)

i++;

else

{

j–;

mod=3;

}

}

else

if(mod==3)

{

if(j=1a[i][j-1]==0)

j–;

else

{

i–;

mod=4;

}

}

else

if(mod==4)

{

if(i=1a[i-1][j]==0)

i–;

else

{

if(a[i][j+1]!=0a[i+1][j]!=0a[i-1][j]!=0a[i][j-1]!=0)

{

break;

}

j++;

mod=1;

}

}

}while(mod!=5);

for(i=0;in;i++)

{

for(j=0;jn;j++)

{

printf(“%4d”,a[i][j]);

}

printf(“\n”);

}

getchar();

}

螺旋矩陣C語言實現

說一下這個螺旋矩陣的實現方式。

首先,go函數一個遞歸,這你得明白,而遞歸的實現原理類似於棧,也就是先進後出的執行方式。很多人會理解成這樣的執行方式:

ri = 1, rj = 2, gi = 0, gj = 1, start = 2, dir = 0

ri = 2, rj = 2, gi = 1, gj = 3, start = 3, dir = 1

ri = 2, rj = 1, gi = 3, gj = 2, start = 4, dir = 2

ri = 1, rj = 1, gi = 2, gj = 0, start = 5, dir = 3

ri = 1, rj = 0, gi = 2, gj = -1, start = 6, dir = 3

ri = 1, rj = 1, gi = 0, gj = 0, start = 7, dir = 0

ri = 0, rj = 1, gi = -1, gj = 0, start = 8, dir = 0

ri = 1, rj = 1, gi = 0, gj = 2, start = 9, dir = 1

從start = 2開始一直往裡面進,然後算到start = 9?

不,其實並不是這樣,恰恰相反,遞歸會不斷的往裡面進,一直進到最裡層,也就是達到條件

if(startfinal) return;為止。然後開始出棧,從start = 9開始算,算回到start = 8.。。一直到start = 2結束。

也就是最後的執行順序應該是:

ri = 1, rj = 1, gi = 0, gj = 2, start = 9, dir = 1

ri = 0, rj = 1, gi = -1, gj = 0, start = 8, dir = 0

ri = 1, rj = 1, gi = 0, gj = 0, start = 7, dir = 0

ri = 1, rj = 0, gi = 2, gj = -1, start = 6, dir = 3

ri = 1, rj = 1, gi = 2, gj = 0, start = 5, dir = 3

ri = 2, rj = 1, gi = 3, gj = 2, start = 4, dir = 2

ri = 2, rj = 2, gi = 1, gj = 3, start = 3, dir = 1

ri = 1, rj = 2, gi = 0, gj = 1, start = 2, dir = 0

好了,這就是以上的原理,然後再來看你的gi和gj,處理衝突這一點理解得很對,但是不是說什麼跳到05啥的,處理衝突是這一句:

if(a[ri][rj]==0),首先,ri、rj、gi、gj都是坐標(這兒不懂的追問)看上面的數據,在start 等於9、7、5的時候,ri 、rj的值是一樣的,這也就衝突了,在start等於9的時候 ,

a[ri = 1][rj =1]已經不等於0了,到了if語句肯定不成立了, 自然就走的else,然後用得坐標就變成了gi和gj,也就是start = 7的時候, 位置就是a[gi][gj],實現了解決衝突的效果。

至於gi和gj什麼時候+1什麼時候-1這個,這個需要看一下原作者的思路,通過不同的dir去控制不同的位置,衝突的g坐標將其當做r坐標再去判斷是否該位置上有值,有的話繼續根據dir去尋找,一直到發現該位置是0,然後將其佔有。

不懂的繼續追問

用C語言設計演算法輸出一個5*5階的螺旋方陣

我在ACM上寫了一個N*N階螺旋陣的題,

代碼給你了,可能有點長。

輸入5即有結果。

#include stdio.h

int main()

{

int n,k,a[30][30]={0},x=0,y=0,w[5]={1,1,1,1,1};

scanf(“%d”,n);

k=2;

a[0][0]=1;

while(k=n*n){

if(w[1](x0a[x-1][y]==0)) {

a[x-1][y]=k;

k++;

x–;

if(x0a[x-1][y]==0)

w[1]=1,w[2]=0,w[3]=0,w[4]=0;

else w[1]=0,w[2]=1,w[3]=1,w[4]=1;

}

else if(w[2](yn-1a[x][y+1]==0)){

a[x][y+1]=k;

k++;

y++;

if(yn-1a[x][y+1]==0)

w[1]=0,w[2]=1,w[3]=0,w[4]=0;

else w[1]=1,w[2]=0,w[3]=1,w[4]=1;

}

else if(w[3](xn-1a[x+1][y]==0)){

a[x+1][y]=k;

k++;

x++;

if(xn-1a[x+1][y]==0)

w[1]=0,w[2]=0,w[3]=1,w[4]=0;

else w[1]=1,w[2]=1,w[3]=0,w[4]=1;

}

else if(w[4](y0a[x][y-1]==0)){

a[x][y-1]=k;

k++;

y–;

if(y0a[x][y-1]==0)

w[1]=0,w[2]=0,w[3]=0,w[4]=1;

else w[1]=1,w[2]=1,w[3]=1,w[4]=0;

}

}

for(k=0;kn;k++){

int t=1;

for(x=0;xn;x++){

if(t){

if(n=3) printf(“%-d”,a[k][x]);

else if(n=9) printf(“%-2d”,a[k][x]);

else printf(“%-3d”,a[k][x]);

t=0;

}

else {

if(x==n-1) printf(” %-d”,a[k][x]);

else {

if(n=3) printf(” %-d”,a[k][x]);

else if(n=9) printf(” %-2d”,a[k][x]);

else printf(” %-3d”,a[k][x]);

}

}

}

printf(“\n”);

}

return 0;

}

c語言螺旋方陣

調試了一下,問題主要是起始點的控制邏輯。

修改代碼和注釋如下:

#includestdio.h

int main(void)

{

 int mm, i = 0, j = 0, aa[15][15], num1 = 1, num3, num2; 

 printf(“Enter n(n=15):”);  

 scanf(“%d”, mm);

 for (num2 = mm – 1; num2  0; num2–) 

 {

  if(((mm-1)/2==i)(mm%2!=0))   //處理總列數為奇數的中點值

   aa[i][j] = num1;

  //for (num3 = 0; num3  num2; num3++)   起始點邏輯有誤,用下一行替換

  for (num3 = mm-num2-1; num3  num2; num3++)

  {

   aa[i][j] = num1;

   num1 = num1 + 1;

   j  = j + 1;

  } 

  //for (num3 = 0; num3  num2; num3++)    起始點邏輯有誤,用下一行替換

  for (num3 = mm-num2-1; num3  num2; num3++)

  {

   aa[i][j] = num1;

   num1 = num1 + 1; 

   i = i + 1;

  }

  //for (num3 = 0; num3  num2; num3++)    起始點邏輯有誤,用下一行替換

  for (num3 = mm-num2-1; num3  num2; num3++)

  {

   aa[i][j] = num1;

   num1 = num1 + 1;

   j  = j – 1;

  }

  //for (num3 = 0; num3  num2; num3++)    起始點邏輯有誤,用下一行替換

  for (num3 = mm-num2-1; num3  num2; num3++)

  {

   aa[i][j] = num1;

   num1 = num1 + 1;

   i = i – 1;

  }

  i++;

  j++;

 }

 for (i = 0; i  mm; i++)

 {

  for (j = 0; j  mm; j++)

  {

   printf(“%5d”, aa[i][j]);

  }

  printf(“\n”);

 }

 return 0;

}

在VC6調試通過,如下圖:

供參考。

C語言螺旋矩陣

#include stdio.h #includestdlib.h void main() { int

i,j,n,number=1,a[30][30]; printf(“Please input a number N:”);

scanf(“%d”,n); for(i=0;i=n/2;i++) //控制總共有幾個順時針螺旋 {

for(j=i;jn-i;j++) //向右(改變縱坐標,保持橫坐標不變) a[i][j]=number++;

for(j=i+1;jn-i;j++) //向下(改變橫坐標,保持縱坐標不變) a[j][n-i-1]=number++;

for(j=n-i-2;ji;j–) //向左(改變縱坐標,保持橫坐標不變) a[n-i-1][j]=number++;

for(j=n-i-1;ji;j–) //向上(改變橫坐標,保持縱坐標不變) a[j][i]=number++; }

for(i=0;in;i++) { for(j=0;jn;j++) printf(“%d\t”,a[i][j]);

printf(“\n”); } }

C語言如何列印螺旋方陣?最好能夠說說思路。

int n為階數,具體列印格式你可以按需要改 void op(int n) { int i=0,j=0; int*(*p); int temp = 1; int t; p = (int**)malloc(sizeof(int*)*n); for (t=0;tn;t++) { p[t]=(int*)malloc(sizeof(int)*n); } for (t=0;t((float)n/2);t++) { for (;jn-t;j++) p[i][j] = temp++; j–; i++; for(;in-t;i++) p[i][j] = temp++; i–; j–; for(;j=t;j–) p[i][j] = temp++; j++; i–; for(;it;i–) p[i][j] = temp++; j++; i++; } for (i=0;in;i++) { for (j=0;jn;j++) { printf(\”%3d \”,p[i][j]); } printf(\”\\n\”); } }

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/205878.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:47
下一篇 2024-12-07 17:47

相關推薦

  • Python將矩陣存為CSV文件

    CSV文件是一種通用的文件格式,在統計學和計算機科學中非常常見,一些數據分析工具如Microsoft Excel,Google Sheets等都支持讀取CSV文件。Python內置…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python雙重循環輸出矩陣

    本文將介紹如何使用Python雙重循環輸出矩陣,並從以下幾個方面詳細闡述。 一、生成矩陣 要輸出矩陣,首先需要生成一個矩陣。我們可以使用Python中的列表(List)來實現。具體…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • 二階快速求逆矩陣

    快速求逆矩陣是數學中的一個重要問題,特別是對於線性代數中的矩陣求逆運算,如果使用普通的求逆矩陣方法,時間複雜度為O(n^3),計算量非常大。因此,在實際應用中需要使用更高效的演算法。…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28

發表回復

登錄後才能評論