P5725 【深基4.习8】求三角形(c++)

题目描述

模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。

输入格式

输入矩阵的规模,不超过 9。

输出格式

输出矩形和正方形

输入输出样例

输入 #1复制

4

输出 #1复制

01020304
05060708
09101112
13141516

      01
    0203
  040506
07080910

解题思路

矩形不必多说,设定n行n列,再设定一个数从1开始,只要这个数小于10就补前导0输出即可

	int n;
	cin >> n;
	
	int tmp = 1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (tmp < 10) cout << 0;
			cout << tmp;
			tmp++;
		}
		cout << endl;
	}
	cout << endl;

重点看第二个,要求三角形,也是设定一个数num从1开始,不足10就补前导0,这时候就要观察规律了。

观察得到以下结论:

1.对于给出的数n,一共存在n行,2n列

2.从第一行开始,存在非空格数依次是 2, 4, 6, 8,……。 将他们和行数一起关联,可以发现第i行,非空格数是 2i 个

3.每一行有2n列,那么每一行的空格数就是 2n - 2i个

那么我们可以得到以下核心代码

	//4行最多4*8格,n行,2*n列 
	//2 4 6 8 10 每行增加2格
	//第i行,有2*i个数,有2*n - 2*i个空格
	//i从一算起
	int num = 1;
	for (int i = 1; i <= n; i++)	//第i行 
	{
		int space = 2*n - 2*i;
		int flag = 0;		//标记小于10的数输出0后是否输出这个数 
		for (int j = 1; j <= 2*n; j++)	//第j列,有2n个数,每列只会输出一个数 
		{
			if (flag == 1) {
				flag = 0;
				continue;
			}
			if (space == 0 && num < 10 ) {	//判断space为0要放在前面 
				cout << "0" << num;
				flag = 1;
				num++;
			}
			else if (space == 0 ) {
				cout << num;
				flag = 1; 
				num++;
			}
			if (space != 0) //每一列做判断 
			{
				cout << " ";	//输出一个空格 
				space--;
			}
	
		}
		cout << endl;
	 } 

这里我让j从1到2n, 对齐n有n行2n列,

当输出非空格时,实际上我们输出了占据两个空格的数,这时候就需要让下一个位置直接跳过不做任何操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值