1. 程式人生 > >PAT--L1-054 福到了(15 分)

PAT--L1-054 福到了(15 分)

L1-054 福到了(15 分)

“福”字倒著貼,寓意“福到”。不論到底算不算民俗,本題且請你編寫程式,把各種漢字倒過來輸出。這裡要處理的每個漢字是由一個 N × N 的網格組成的,網格中的元素或者為字元 @ 或者為空格。而倒過來的漢字所用的字元由裁判指定。

輸入格式:

輸入在第一行中給出倒過來的漢字所用的字元、以及網格的規模 N (不超過100的正整數),其間以 1 個空格分隔;隨後 N 行,每行給出 N 個字元,或者為 @ 或者為空格。

輸出格式:

輸出倒置的網格,如樣例所示。但是,如果這個字正過來倒過去是一樣的,就先輸出bu yong dao le,然後再用輸入指定的字元將其輸出。

輸入樣例 1:

$ 9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@

輸出樣例 1:

$$$$$  $ 
$ $ $  $ 
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
 $$$  $$$
 $ $   $ 
 $$$  $$$
$$$$$  $ 

輸入樣例 2:

& 3
@@@
 @ 
@@@

輸出樣例 2:

bu yong dao le
&&&
 & 
&&&

解題思路 :這題很簡單,一開始我還以為要自己打印出來,然後再看一下題目就理解了,就是把輸入的倒過來,然後把不是空格的替換成替換成要求的字元就好了,要注意的是每次換行的那個字元要用getchar()給去掉,要不然會出問題,我一開始不知道哪裡出問題,然後輸入的時候發現不對勁,後面才反映過來,它把換行的字元也輸入進去了,然後處理一下就ok了。

#include<bits/stdc++.h>
using namespace std;
char c[101][101],d[101][101];
int main(void)
{
	char a;
	int n,flag=0;
	scanf("%c %d",&a,&n);
	getchar();
	for(int i=0;i<n;i++)
	{
	   for(int j=0;j<n;j++)
	   {
	   	    scanf("%c",&c[i][j]);  
	   }
	    getchar();
	}
	
	for(int i=n-1,p=0;i>=0;p++,i--)
	{
		for(int j=n-1,q=0;j>=0;q++,j--)
		{
			d[p][q]=c[i][j];	
		}
	}
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(c[i][j]!=d[i][j])
			{
				flag=1;
				break;
			}
		}
	}
	
	if(flag==1)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				if(d[i][j]!=' ')
				printf("%c",a);
				else 
				printf("%c",d[i][j]);
			}
			cout<<endl;
		}
	}
	else
	{
		printf("bu yong dao le\n");
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				if(d[i][j]!=' ')
				printf("%c",a);
				else 
				printf("%c",c[i][j]);
			}
			cout<<endl;
		}
	}
	return 0;
}