方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序.填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/01 16:08:28
方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序.填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时
方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序.填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时针方向螺旋填充.输出时要求每个数据宽度为4、右对齐.
编程可用素材:printf("Please input n:")、printf("\nResult is:\n")、printf("%4d"...、printf("\n").
程序的运行效果应类似地如图1所示,图1中的第1个6是从键盘输入的内容.
下面是我做的 .可以运行 就是斜着的那排数字有问题
#include <stdio.h>
int main(void)
{
int n,str[20][20],i,j,m,y,k = 0;
printf("Please input n:");
scanf("%d",&n);
if (n % 2 == 0)
{
m = n / 2;
}
else
{
m = n / 2 + 1;
}
for (i = 0; i < m; i++)
{
for (j = i; j < n - i - 1; j++)
{
k++;
str[i][j] = k;
}
for (y = i,j = n - i - 1; y < n - i; y++,j--)
{
k++;
str[y][j] = k;
}
for (j = n - i - 2; j > i; j--)
{
k++;
str[j][i] = k;
}
}
printf("\nResult is:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i; j++)
{
printf("%4d",str[i][j]);
}
printf("\n");
}
return 0;
}
}
方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序.填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时
网上找到一段可以正确运行的,参考一下:
#include<stdio.h>
int main()
{
int low,i,j,hi,N;
int a[80][80];
while(scanf("%d",&N))
{
if(N==0)
break;
low=0;
hi=N;
for(j=1; j<=N*(N+1)/2; low++,hi--)
{
//N行螺旋共有N*(N+1)/2个数
//采用的方法是将1~N*(N+1)/2依次填入到对应位置
for(i=low; i<hi-low; i++)
a[low][i]=j++;
for(i=low+1; i<hi-low; i++)
a[i][hi-i-1]=j++;
for(i=(hi-low)-2; i>low; i--)
a[i][low]=j++;
}
for(i=0; i<N; i++)
{
for(j=0; j<N-i; j++)
printf("%4d ",a[i][j]);
printf("\n");
}
}
return 0;
}