C语言实现 蓝桥杯 历届试题 打印十字图

试题 历届试题 打印十字图

                                                                                  蓝桥杯试题解答汇总链接

资源限制

       时间限制:1.0s 内存限制:256.0MB


问题描述

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

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


输入格式

       一个正整数 n 表示要求打印图形的层数。


输出格式

       对应包围层数的该标志。


样例输入
样例一:
1
样例二:
3

样例输出
样例一:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例二:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

数据规模与约定
n<30

试题解析

以下为n=2时的情况以o点为坐标原点建立平面直角坐标系水平为x轴,竖直方向为y轴

..$$$$$$$$$..
..$.......$..
$$$.$$$$$.$$$
$...$...$...$
$.$$$.$.$$$.$
$.$...$...$.$
$.$.$$$(O)$$.$.$
$.$...$...$.$
$.$$$.$.$$$.$
$...$...$...&
$$$.$$$$$.$$$
..$.......$..
..$$$$$$$$$..

结合题目给出的样例观察图像不难发现这个图像就是在中心十字形外围n层十字架形状的边那么现在就变成了线性规划的问题:
根据规律我们可以得到几个式子,当坐标(x,y)满足式子的时候就输出$不满足就输出.
①y=0,-2≤x≤2;或x=0,-2≤y≤2;
②|y|=2a+2,|x|≤2或|x|=2a+2,|y|≤2;
③|y|=2a,2a≤|x|≤2a+2或|x|=2a,2a≤|y|≤2a+2;


代码
#include<stdio.h>
#include<stdlib.h>
int right(int x,int y,int n){
	int a;// a用来确定他是第几圈的
	for(a = n;a >= 1;a--){// 判断是否是符合条件的点 
		if((abs(y)==2*a+2 && abs(x)<=2*a)||(abs(x)==2*a+2 && abs(y)<=2*a)){
			return 1;
		}else if((abs(y)==2*a && abs(x)>=2*a && abs(x)<=2*a+2)||(abs(x)==2*a && abs(y)>=2*a && abs(y)<=2*a+2)){
			return 1;
		}else if((y==0 && abs(x)<=2)||(x==0 && abs(y)<=2)){
			return 1;
		}
	}
	return 0;
}
int main(){
	int n=0;
	scanf("%d",&n);
	int i,j,len = 2*n+2;
	for(i = -len;i <= len;++i){
		for(j = -len;j <= len;++j){
			if(right(i,j,n)){// i,j分别对应坐标轴的x,y 
				printf("$");
			}else{
				printf(".");
			}
		}
		printf("\n");
	}
	return 0;
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Derrick-Xu

谢大哥打赏,我会继续努力!

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

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

打赏作者

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

抵扣说明:

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

余额充值