晕(北理工乐学平台作业题)

这道题在网上没有搜到不用数组的代码pwp 下面是我写的一个不用数组的写法owo

看着这样的“回”形图案你晕吗?让我们不用数组,来做出它。

输入:
    n。正方形的边长

输出:
    边长为 n 的数字回形方阵。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 3↵
以文本方式显示
  1.   1  2  3↵
  2.   8  9  4↵
  3.   7  6  5↵
1秒64M0
测试用例 2以文本方式显示
  1. 4↵
以文本方式显示
  1.   1  2  3  4↵
  2.  12 13 14  5↵
  3.  11 16 15  6↵
  4.  10  9  8  7↵
1秒64M0
测试用例 5以文本方式显示
  1. 5↵
以文本方式显示
  1.   1  2  3  4  5↵
  2.  16 17 18 19  6↵
  3.  15 24 25 20  7↵
  4.  14 23 22 21  8↵
  5.  13 12 11 10  9
#include<stdio.h>
int printcycle(int acycle,int Line,int Size)//acycle:打印的是从外向内第几圈 Line:打印的行数 Size:总边长 
{
	int first=1,last,size=Size-2*(acycle-1),line=Line-acycle+1,nextcycle;
	if(size<0) return 0;                                 //first:这一圈左上角的数 last:左下角的数 size:这一圈的边长 line:打印的是这一圈的第line行
	for(int i=2;i<=acycle;i++) first+=4*(Size-2*(i-2))-4;  
	last=first+3*(size-1);                        //计算出first和last 
	if(line==1) for(int i=0;i<size;i++) printf("%3d",first+i);  //如果是这一圈的第一行 则直接打印出来 
	else if(line==size) for(int i=0;i<size;i++) printf("%3d",last-i); //如果是这一圈最后一行 直接打印出来 
	else if(1<line && line<size)                //如果是中间行 先打印第一个数字 然后让圈数+1后再输入这个函数打印里面的圈 
	{
		printf("%3d",first+4*(size-1)-line+1); //打印第一个数字 
		if(Line-acycle>0)
		{
			nextcycle=acycle+1;
			printcycle(nextcycle,Line,Size);  //打印里面的圈 
		}
		printf("%3d",first+size+line-2);      //打印第二个数字 
		if(acycle==1) printf("\n");           //如果打印完最外面,即第一圈的中间行的第一个数字,需要换行 
	}
}
int main()
{
	int Size;
	scanf("%d",&Size);
	for(int Line=1;Line<=Size;Line++)
	{
		printcycle(1,Line,Size);             //看似只循环打印出第一圈,但打印第一圈中间行时候,函数内的嵌套函数会执行,打印出内部的数字 
		if(Line==1 || Line==Size) printf("\n"); //第一行最后一行需要换行 
	}
	return 0;
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红茶Nauy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值