7-3 福到了 (15 分)
“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @
或者为空格。而倒过来的汉字所用的字符由裁判指定。
输入格式:
输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @
或者为空格。
输出格式:
输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le
,然后再用输入指定的字符将其输出。
输入样例 1:
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@
结尾无空行
输出样例 1:
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $
结尾无空行
输入样例 2:
& 3
@@@
@
@@@
结尾无空行
输出样例 2:
bu yong dao le
&&&
&
&&&
结尾无空行
/*1.题意:输入的图形(由空格和@组成)如果不是对称的则用输入的一个字符替换原图形的字符(空格还是用空格)
如果对称则输出bu yong dao le并输出替换的图形。
2.思路:(1)输入的图形要用二维字符数组储存
(2)二维数组储存字符时换行符("\n")也会储存。
因此要用getchar()来吞换行符。
(3)判断是不是对称就主要看第一个字符和最后一个字符是否
相等,第二个和倒数第二个是否相等,以此类推来判断是否为对称图形。
(4)无论对不对称都要替换倒过来(对称倒过来图形一样)
(5)倒过来的方法:从行和列的末尾输出(即从后面往前面输出,倒着输出)
*/
/*1.题意:输入的图形(由空格和@组成)如果不是对称的则用输入的一个字符替换原图形的字符(空格还是用空格)
如果对称则输出bu yong dao le并输出替换的图形。
2.思路:(1)输入的图形要用二维字符数组储存
(2)二维数组储存字符时换行符("\n")也会储存。
因此要用getchar()来吞换行符。
(3)判断是不是对称就主要看第一个字符和最后一个字符是否
相等,第二个和倒数第二个是否相等,以此类推来判断是否为对称图形。
(4)无论对不对称都要替换倒过来(对称倒过来图形一样)
(5)倒过来的方法:从行和列的末尾输出(即从后面往前面输出,倒着输出)
*/
#include <stdio.h>
int main()
{
char x;
int n,i,j,flag1=0,flag2=0;
scanf("%c %d",&x,&n);
getchar();//-->如果先输入数字再输入字符一定要吞掉换行,不然换行符会自动赋入你要输入的字符中
//这是c语言中特殊的情况。--->在两者中间加入getchar即可。
char a[n][n];
//输入图形
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%c",&a[i][j]);
}
getchar();//吞换行,如果不吞-->原理:1 2 3 \n 4 5 6 \n 7 8 9 \n (就会把\n 存入)
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i][j]!=a[n-i-1][n-j-1]){
//以n=3为例找规律(0,0)和(2,2)关系,(0,1)和(2,1)以此类推
flag1=1;//说明不对称
flag2=1;
break;
}
}
if(flag2==1)
break;
}
if(flag1==0){
printf("bu yong dao le\n"); //只有对称才要输出这个
}
for(i=n-1;i>=0;i--){
for(j=n-1;j>=0;j--){
if(a[i][j]=='@')
printf("%c",x);
else
printf(" ");
}
printf("\n");//因为我们吞啦换行符,数组没有换行符,不会主动换行。 因此每输出一行要进行换行。
}
return 0;
}