Hduoj2074【水题】

/*叠筐
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12820    Accepted Submission(s): 3303


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
浙江工业大学网络选拔赛 
*/ 
#include<stdio.h>
int main()
{
	int n;
	char a, b, s[88][88];
	int ok = 0;
	while(scanf("%d %c %c", &n, &a, &b) != EOF)
	{
		if(ok)
		printf("\n");
		if(n == 1)
		{
			printf("%c\n", a);
			ok = 1;
			continue;
		}
		int k = 1, flag = 1;
		for(int i = n/2+1, j = n/2+1; i >= 1 ; i--, j--)
		{
			int x,y;
			for( x = i, y = j; y <= j+k-1; y++)//r
			{
				if(flag)
				s[x][y] = a;
				else
				s[x][y] = b;
			}
			y--;
			for( ; x <= i+k-1; x++)//down
			{
				if(flag)
				s[x][y] = a;
				else
				s[x][y] = b;
			}
			x--;
			for( ; y >= j; y--)
			{
				if(flag)
				s[x][y] = a;
				else
				s[x][y] = b;
			}
			y++;
			for(; x > i; x --)
			{
				if(flag)
				s[x][y] = a;
				else
				s[x][y] = b;
			}
			if(flag)
			flag = 0;
			else
			flag = 1;
			k += 2; 
		}
		for(int i = 1; i <= n; i++)
		{
			for(int j = 1; j <= n; j++)
			{
				if(i == 1 && j == 1)
				printf(" ");
				else if(i == 1 && j == n)
				printf(" ");
				else if( i == n && j == n)
				printf(" ");
				else if(i == n && j == 1)
				printf(" ");
				else
				printf("%c", s[i][j]);
			}
			printf("\n");
		}
		ok = 1;
	}
	return 0;
}

题意 :给定一个数字两个字符,输出特定的图形。

注意:边界以及n=1的情况

你可能感兴趣的:(c)