旋转数字——旋转摆花

【题目描述】
编写程序打印如下菱形图形(1≤n≤99),菱形由nn个整数组成,图形从第n行的第1列开始,数字分别是nn,nn-1,……2,1,并且逆时针向中间转入,如果1个数据项宽度不足nn的值宽度,用0补足。提醒:图案中没有数字的地方用空格填满,每行最后一个数字后面没有多余的空格。
例如n=7,输出:
在这里插入图片描述
【输入】
输入文件rotation.in包含1个整数n。
【输出】
输出文件rotation.out是一个菱形图形,图形从第n行的第1列开始,数字分别是nn,nn-1,……2,1,并且逆时针向中间转入
【限制】
1≤n≤99
【提示】
m=4
i=15;
printf("%0d", m, i);  //这里用表示系数待定,m即为指定的宽度
//上面语句输出“0015”,数据宽度为4,不足4位,前补0
printf("%*c", m, ‘ ‘); //左边语句输出“ ”,即输出4个空格

#include "stdio.h"
const int N0=2*100-1+10;
int a[N0][N0]={ 0 };
struct node
{	int row, col;
}dir[4]={ {1, 1}, {-1, 1},{-1, -1},{1, -1}};//记录方位 

int main()
{	int x, y, x1, y1, k; //一些变量 
	int n,i,j, d=0;
	int row,col,row1,col1,m=0,c;
	freopen("rotation.in", "r", stdin);
	freopen("rotation.out", "w", stdout);
	scanf("%d", &n); // n*n的菱形  假设为7 
	//*********************************
	row=n;
	col=1; //7
	d=0;
	int t=n*n; //49
	while(t!=0){
		m++; //判断最大是几个数 为2 
		t/=10;
	} 
	for(i=n*n;i>=1;i--){ //输入所有方位的值 
		a[row][col]=i; //a[7][7] = 1
		row1=row+dir[d].row;	//2
		col1=col+dir[d].col;	// 8
		if(row1<1 || col1<1 || row1>2*n-1 || col1>2*n-1 || a[row1][col1]!=0){ //这个是用来判断超界 
			d=(d+1)%4;
			row1=row+dir[d].row;
			col1=col+dir[d].col;
		}
		row=row1; //2
		col=col1; //8
	}
	for(i=1;i<=2*n-1;i++){
		for(j=1;j<=2*n-1;j++)
			if(a[i][j]!=0)	//按照方位输入数字 
				printf("%0*d",m,a[i][j]);
			else
				if( (i<=n && j<n+i )|| (i>n && j<3*n-i)) //输入空格 
					printf("%*c", m,'  ');	
	printf("\n");
	}

	//=================================
	return 0;
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值