蓝桥杯2015C9.打印大X

本文介绍了一种使用C++编程语言打印特定宽度和高度的大写字母X的方法。通过用户输入笔画宽度和图案高度,程序能准确地生成由星号组成的X图案,并使用句点符填充空白区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数m n,表示笔的宽度X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X

例如,用户输入:
3 9
程序应该输出:(如有对齐问题,参看【图1.jpg】)

***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***

在这里插入图片描述
再例如,用户输入:
4 21
程序应该输出

****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****

在这里插入图片描述

好!

我数了一下

题目给的m是4,n是21的时候,行宽是24.
m是3,n是9的时候,行宽是13.。
(我好像发现了个不得了的大秘密)
行宽 = m + n -1;
代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int m,n;
	scanf("%d %d",&m,&n);//m表示笔的宽度,n表示x的高度 
	int a = m+n-1;//每一行的宽度
	int i,j,k;
	for(i = 0;i<=n/2;i++)//先搞上半边的 
	{
		for(j = 0;j<a;j++)
		{
			if(( j>=i && j<m+i )||( j>=n-1-i && j<n-1-i+m ))//这||前面是前面的m位*,后面是后面的*,减少重叠的时候的判断了。 
			{
				cout<<'*';
			}
			else  cout<<'.';
		}
		cout<<endl; 
	}
	for(i = n/2-1;i>=0;i--)//倒过来再来一波 
	{
		for(j = 0;j<a;j++)
		{
			if(( j>=i && j<m+i )||( j>=n-1-i && j<n-1-i+m ))//这||前面是前面的m位*,后面是后面的*,减少重叠的时候的判断了。 
			{
				cout<<'*';
			}
			else  cout<<'.';
		}
		cout<<endl; 
	}//不能说是一模一样,只能说是分毫不差.
	cout<<endl; 
}

艰难!

运用题给示例,答案正确。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值