训练赛二(hdu-2074)(格式+细节题)

叠筐

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 25100    Accepted Submission(s): 6634


 

Problem Description

需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

 

 

Input

输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;

 

 

Output

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。

 

 

Sample Input

 

11 B A 5 @ W

 

 

Sample Output

 

AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAA @@@ @WWW@ @W@W@ @WWW@ @@@

 

 

Author

qianneng

 

 

Source

浙江工业大学网络选拔赛

 

 

Recommend

linle   |   We have carefully selected several similar problems for you:  2072 2091 1096 1093 1092 

 

 

Statistic | Submit | Discuss | Note

 

心得:1、对称图形,分割考虑,每部分都是对称的,只考虑它对称的部分,然后将其他部分转换为对称部分来考虑;

2、考虑特殊情况,当n==1时,只输出一个。

3、格式问题,注意题目描述,是每个叠筐之间,所以结尾不要输出空格;

4、综上,做题时1,2,3考虑到了,4没考虑到。

 

#include<bits/stdc++.h>
using namespace std;
char a[120][120];
int main(void)
{
	int n,i,j,t1,t2,t3,t4,tp,pt=0;
	char c1,c2;
	while(~scanf("%d %c %c",&n,&c1,&c2))
	{
		if(pt) printf("\n");
		pt++;
		if(n==1)
		{
			printf("%c\n",c1);
			continue;
		}
		tp=(n+1)/2;
		if(tp%2==1) swap(c1,c2);
		memset(a,c2,sizeof(a));
		tp=(n+1)/2;
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
			{
				if(i%2==0&&(i+j==n+1||i==j)) a[i][j]=c1;
				if(j%2==0&&(i+j==n+1||i==j)) a[i][j]=c1;
			}
		}
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
			{
				if(i>=tp) t1=n+1-i;else t1=i;
				if(j>=tp) t2=n+1-j;else t2=j;
				if(t1%2==0&&t2>=t1) a[i][j]=c1;
				if(t2%2==0&&t1>=t2) a[i][j]=c1;
			}
		}
		a[1][1]=a[n][n]=' ';
		a[1][n]=a[n][1]=' ';
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++) printf("%c",a[i][j]);
			printf("\n");
		}
	}
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值