历届试题 打印十字图

本文介绍了一种基于字符的十字形徽标生成算法,可根据用户输入的层数参数,在命令行环境中绘制不同大小的十字形图案。文章提供了一段C++代码实现,通过巧妙的逻辑判断来确定每个字符的位置,最终输出由美元符号和句点组成的十字形图案。

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

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)

$$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$

对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。

输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数 输出: 对应包围层数的该标志。 例如: 用户输入: 1 程序应该输出: ..$$$$$.. ..$...$.. $$$.$.$$$ $...$...$ $.$$$$$.$ $...$...$ $$$.$.$$$ ..$...$.. ..$$$$$.. 再例如: 用户输入: 3 程序应该输出: ..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$.. 请仔细观察样例,尤其要注意句点的数量和输出位置。 资源约定: 峰值内存消耗 < 64M CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意: main函数需要返回0 注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。 注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型

#include <iostream>
#include <cstdio>
using namespace std;
int n;
int check(int i, int j)
{
	if(i>2*n+3)//上下 
		i=4*n-i+6;
	if(j>2*n+3)
		j=4*n-j+6;
	if(i<=2&&j<=2)return 0;//前两行
	if(i%2==1&&j==i+1)return 0;//s.后面的点

	if(j%2==1&&j<i-2)return 1;//s.前面的s

	if(i%2==0&&j==i+1)return 1;	//偶数行$

	if(i%2==1&&j>=i-2)return 1;//奇数行中间的$
	return 0;//剩下的都是点
}
int main()
{
	int i,j;
	scanf("%d", &n);
	for(i=1;i<=4*n+5;i++)//总共2*n+5行
	{
		for(j=1;j<=4*n+5;j++)
		{
			if(check(i,j))
				printf("$");
			else
				printf(".");
		}
		printf("\n");
	} 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值