我正在编写一个程序以显示如下

when n=3
1 2 3
7 8 9
4 5 6

when n=5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10


我的程序是

#include<stdio.h>
#include<conio.h>
int main()
{
    int n=5,r=1,c=1,i=1,mid=0;
    if(n%2==0)
      mid=(n/2);
    else
      mid=(n/2)+1;
      printf("mid = %d\n",mid);
    while(r<=n)
    {
      while(c<=n)
      {
        printf("%d ",i);
        c++;
        i++;
      }
      r++;
      if(r<=mid)
       i=i+n;
      else
       i=i-(2*n);
      printf("\n");
      c=1;
    }
    getch();
    return 0;
}


当我给出n = 3时,我得到了预期的输出。但是当我给n = 5时我得到如下

1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
11 12 13 14 15


有人可以帮忙实现预期的输出。

最佳答案

使用您的代码解决方案是

#include<stdio.h>
#include<conio.h>
int main()
{
    int n=5,r=1,c=1,i=1,mid=0;
    int maxRow = n;
    if(n%2==0){
      mid=(n/2);
      maxRow--;
    }
    else
      mid=(n/2)+1;
      printf("mid = %d\n",mid);
    while(r<=maxRow)
    {
      while(c<=n)
      {
        printf("%d ",i);
        c++;
        i++;
      }
      r++;
      if(r<=mid)
       i=i+n;
      else if (r >= n)
        i=n+1;
      else
        i=i-((1+(r-mid))*n);

      printf("\n");
      c=1;
    }
    getch();
    return 0;
}


如你看到的:


i=i-(2*n);已更改。您写的不是通用的,而是针对n=3情况的。
我添加了else if (r >= n)
最后一件事,必须为外部使用特定变量,而由于n如果n是偶数,则必须递减。


一些技巧:


给您的变量解释性名称
为了使代码更具可读性,如果要初始化变量,请每行声明1个变量。
在代码块之间保留空白行。




int main ()
{
    int squareDim=5;
    int row=1;
    int col=1;
    int valueToPrint=1;
    int mid=0;
    int maxRow = squareDim;

    if(squareDim%2==0)
    {
        mid=(squareDim/2);
        maxRow--;
    }
    else
    {
        mid=(squareDim/2)+1;
    }

    printf("mid = %d\n",mid);

    while(row<=maxRow)
    {
        while(col<=squareDim)
        {
            printf("%d ",valueToPrint);
            col++;
            valueToPrint++;
        }

        row++;

        if(row<=mid)
        {
            valueToPrint=valueToPrint+squareDim;
        }
        else if (row >= squareDim)
        {
            valueToPrint=squareDim+1;
        }
        else
        {
            valueToPrint=valueToPrint-((1+(row-mid))*squareDim);
        }

        printf("\n");

        col=1;
    }
    return 0;
}

关于c - 打印号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32525493/

10-16 11:27