首页 > 代码库 > HDU2074 叠筐(模拟问题)
HDU2074 叠筐(模拟问题)
Problem Description
http://acm.hdu.edu.cn/showproblem.php?pid=2074
http://acm.hdu.edu.cn/showproblem.php?pid=2074
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
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@ @@@ 题目分析:主要注意各种陷阱,1、注意格式四个小角2、必须从中间开始模拟3、最无奈的格式,n=1的时候,和最后一个输出后没有空格。注意这些就可以AC了。AC代码:/** *@xiaoran *模拟,必须从中心开始 */ #include<iostream> #include<cstdio> #include<map> #include<cstring> #include<string> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<cstdlib> #include<cctype> #include<cmath> #define LL long long using namespace std; char s[105][105]; int main() { int i,j,n,ok,flag=0; char a,b; while(cin>>n>>a>>b){ if(flag)cout<<endl;//注意格式 if(n==1){ cout<<a<<endl; flag=1; continue; } i=n/2; ok=0; while(i!=-1){ if(ok==0){//中心花色 for(j=i;j<n-i;j++) s[i][j]=a;//第一行 for(j=i;j<n-i;j++) s[n-i-1][j]=a;//最后一行 for(j=i;j<n-i;j++) s[j][i]=a;//第一列 for(j=i;j<n-i;j++) s[j][n-i-1]=a;//最后一列 ok=1; }else{ for(j=i;j<n-i;j++) s[i][j]=b;//第一行 for(j=i;j<n-i;j++) s[n-i-1][j]=b;//最后一行 for(j=i;j<n-i;j++) s[j][i]=b;//第一列 for(j=i;j<n-i;j++) s[j][n-i-1]=b;//最后一列 ok=0; } --i; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if((i==0&&j==0)||(i==n-1&&j==0)||(j==n-1&&i==0)||(j==n-1&&i==n-1)) cout<<" "; else cout<<s[i][j]; } cout<<endl; } flag=1; } return 0; }
HDU2074 叠筐(模拟问题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。