叠筐所想!

题目参考:http://blog.csdn.net/akof1314/article/details/5074694

Problem Description:

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

Input

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

Output

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

 



解题:

      题目不难理解,答案却很难理解。要输出这样的格式不难,但是会PE、会WA。关键在于题目未说明四个角是空格还是结束符,每个例子是不是都有间隔?

      1. 四个角都是空格

      2.每个例子是在下一个例子出现才有空格。

当题目中的输出格式含糊时,需要仔细思考,输出的格式到底应该是什么样子!


我的AC程序源码:


#include <iostream>

using namespace std;

int main()

{

int n;

char l,w;

char in,out;

bool qian = false;

while(cin >> n >> l >> w)

{

if(!qian)

{

qian = true;

}

else

{

cout << endl;

}

if( (n/2 + 1) % 2 == 0)

{

out  = w;

in = l;

}

else

{

out = l;

in  = w;

}


for(int i = 1; i <= n/2; i++)

{

if(i == 1)

{

cout << " ";

for(int j = 2; j < n; j++)

{

cout << out;

}

cout <<" " << endl;

}

else

{

int ci = i /2;

if(i % 2 == 0)

{

//ci ge ab

for(int j = 0;j < ci; j++)

{

cout << out << in;

}


//begin:ci*2+1;end:n-ci*2

for(int j = ci*2 + 1; j <= n-ci*2; j++)

{

cout << in;

}


for(int j = 0; j <ci; j++)

{

cout << in << out;

}

cout << endl;

}

else

{

//ci ge ab

for(int j  =0; j < ci; j++)

{

cout << out << in;

}


cout << out;

//begin:ci*2+2;end:n-ci*2-1

for(int j = ci*2 + 2; j <= n-ci*2-1; j++ )

{

cout << out;

}

cout << out;


for(int j  =0; j <ci; j++)

{

cout << in  << out;

}

cout << endl;

}

}

}


for(int i = 1;i <= n/2;i++)

{

cout << out << in;

}

cout << out << endl;


for(int i = n/2+2; i <=n; i++)

{

if(i == n)

{

cout << " ";

for(int j = 2; j < n; j++)

{

cout << out;

}

cout <<" " << endl;

}

else

{

int ci = (n-i + 1)/2;

if(i % 2 == 0)

{

//ci ge ab

for(int j = 0;j < ci; j++)

{

cout << out << in;

}


//begin:ci*2+1;end:n-ci*2

for(int j = ci*2 + 1; j <= n-ci*2; j++)

{

cout << in;

}


for(int j = 0; j <ci; j++)

{

cout << in << out;

}

cout << endl;

}

else

{

//ci ge ab

for(int j  =0; j < ci; j++)

{

cout << out << in;

}


cout << out;

//begin:ci*2+2;end:n-ci*2-1

for(int j = ci*2 + 2; j <= n-ci*2-1; j++ )

{

cout << out;

}

cout << out;


for(int j  =0; j <ci; j++)

{

cout << in  << out;

}

cout << endl;

}


}

}


}


return 0;

}





LOFTER:hgfalgorithm   http://hgfal.lofter.com/post/28eef2_f35165
原文地址:https://www.cnblogs.com/hgfgood/p/4248319.html