想用c语言实现 回形数组 代码该怎么编写
发布网友
发布时间:2022-04-21 09:23
我来回答
共2个回答
热心网友
时间:2023-11-08 22:05
#include <stdio.h>
#define N 100
/* 实现回形数组 */
int main()
{
int array[N][N];
int dimension;
int i, j, num, start, end;
scanf("%d", &dimension); // 输入回形数组维度。
num = 0;
for (i = 0; i < dimension; i++) {
for (j = 0; j < dimension; j++) {
printf("%3d ", num++);
}
printf("\n");
}
printf("\n\n");
num = 1;
start = 0;
end = dimension;
while (1) {
for (i = j = start; j < end; j++) { // 上行
array[i][j] = num++;
}
for (i++, j--; i < end; i++) {// 右列
array[i][j] = num++;
}
for (i--, j--; j >= start; j--) { // 下行
array[i][j] = num++;
}
for (i--, j++; i > start; i--) { // 左列
array[i][j] = num++;
}
start++;
end--;
if (start >= end)
break;
}
/* 打印 */
for (i = 0; i < dimension; i++) {
for (j = 0; j < dimension; j++){
printf("%3d ", array[i][j]);
}
printf("\n");
}
return 0;
}
热心网友
时间:2023-11-08 22:05
#include<stdio.h>
#define N 20//正方形最大值
int count,a[N][N],n;//count表累加,填充数组;n为实际正方形大小
void zheng(int m)//第二种数列,填充第m个正方形
{
int i,j;
for(i=m-1,j=m-1;j<=n-m;j++)//上面行
{
a[i][j]=count;
count++;
}
for(j=n-m,i=m;i<=n-m;i++)//右边列
{
a[i][j]=count;
count++;
}
for(i=n-m,j=n-m-1;j>=m-1;j--)//下边行
{
a[i][j]=count;
count++;
}
for(j=m-1,i=n-m-1;i>m-1;i--)//左边列
{
a[i][j]=count;
count++;
}
if(n%2!=0)a[n/2][n/2]=count;//奇数还要填充最后剩下的中心
}
void display()//显示第二种数列
{
printf("\n");
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d ",a[i][j]);
printf("\n");
}
}
int main()
{
printf("请输入n(正方形的行数):");
scanf("%d",&n);
int i,j;
count=0;//
for(i=0;i<n;i++)
{
for(j=0;j<n;j++,count++)
printf("%3d ",count);
printf("\n");
}//打印第一种数列,下面打印第二种
count=1;//第二种填充当做一个个正方形的边来填充数列
int nn=n/2;//表示要填充多少个正方形
for(i=1;i<=nn;i++)
zheng(i);//循环填充
display();//显示函数
}