题目
回形矩阵
从第一排我们看见,从左往右输出1-5,到了5就从上往下进行输出6~9,依次进行下去。
按照这个逻辑思考
为什么出错?
在for循环的时候,看到这个判定,i<n,i<n-1,那么在缩圈后,此时n还是原来输入的数字,所以导致运行时出错
#include<stdio.h>
int main()
{
int n,count,i,j;
int start=0,finish;
int num[10][10];
scanf("%d",&n);
finish=n-1;//用来固定从左往右后,最后那一列
while(count<n*n)//超过矩阵数时终止
{
for(i=start;i<=finish;i++)//第一个循环:实现从左往右输出
{
num[start][i]=++count;
}
for(i=start+1;i<=finish;i++)//第二个循环:实现从上往下输出
{
num[i][finish]=++count;
}
for(i=finish-1;i>=start;i--)//第三个循环:实现从右往左输出
{
num[finish][i]=++count;
}
for(i=finish-1;i>=start+1;i--)//第四个循环:实现从下网上
{
num[i][start]=++count;
}
finish--;
start++;//进入下一次循环,缩小圈
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%3d",num[i][j]);//把矩阵打印出来
}
printf("\n");//没输出一次空一行
}
return 0;
}
针对每个循环将判断值,改成start,finish,这样在缩圈后会跟着变小
请养成初始化的习惯!!!在有些编译器中,如果不初始化,它自己会给一个值这个值或大或小