我正在编写一个程序以显示如下
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/