[C]回环数(螺旋矩阵)

    技术2024-10-14  38

    1,根据输入数字,动态分配二维数组;

    2,一次写一圈数字(就是转四个边),如此循环,直到圈的宽度为1为止 3,输出结果到文件(在D盘里)

    #include"stdafx.h"#include"stdio.h"#include"stdlib.h"#include"malloc.h"int main(){   int num=1;//记录数到几了,比如n=4,就是1-16   FILE *fp;   int i=0;//行号   int j=0;//列号   int r=0;//行列转换记录,0为行,1为列   int n=0;//输入的数字   int **a;//存放每一行的首地址   int l;   int k1;//临时标号   int k2;//临时标号   //输入   printf("please input your number:/n");   scanf("%d",&n);   if( n < 1 || n > 316)//对输入进行检验   {      printf("Sorry, the number should be between 1 and 316,please retry!!/n");      system("pause");      exit(0);    }   //动态生成二维数组   a = (int **)malloc(sizeof(int *) * n);//每一行的地址   for(k1 = 0; k1 < n; k1++)   {       a[k1] = (int *)malloc(sizeof(int) * n);//存放每一行的数字    }    l = n;   //写入数字   while(l > 1)   {      num = SingleCircle(a,num,i,j,l);      i++;      j++;      l = l-2;    }    if(n % 2 != 0)       a[i][j] = num;   //输出到文件   fp = fopen("d://result.txt","w+");//文件的地址   for(k1 = 0 ; k1 < n ; k1++)   {      for(k2 = 0; k2 < n; k2++)      {          if(a[k1][k2] < 10)             fprintf(fp,"%d     ",a[k1][k2]);//每个数最多占五位,就是最大的n为316                   else if(a[k1][k2] < 100)             fprintf(fp,"%d    ",a[k1][k2]);          else if(a[k1][k2] < 1000)             fprintf(fp,"%d   ",a[k1][k2]);          else if(a[k1][k2] < 10000)             fprintf(fp,"%d  ",a[k1][k2]);          else if(a[k1][k2] < 100000)             fprintf(fp,"%d ",a[k1][k2]);      }      fprintf(fp,"/n");    }    fclose(fp);    printf("please see your result in: d://result.txt/n");    system("pause");    return 0;}int SingleCircle(int **a,int initnum,int initi,int initj,int length)//生成一圈数字{        int count = 1;//中间的变量,是从1-(length-1)的    int t = 0;//标号,记录变数,0-3    int r = 0;//控制行标也就是i的变化    int c = 1;//控制列标也就是j的变化    int i = initi;//初始位置    int j = initj;//初始位置    int num = initnum;//初始的数字大小    while(t < 4)    {      for(count = 1 ;count < length; count++)      {         a[i][j] = num;         i += r;         j += c;         num++;       }       t++;       if(t == 0 || t == 1)//向前加       {         r = (++r % 2);         c = (++c % 2);        }        else                //向回减        {          r = -(++r % 2);          c = -(++c % 2);        }         }     return num;}

    最新回复(0)