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/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

发表回复

登录后才能评论