“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。
输入格式:
输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。
输出格式:
输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。
输入样例 1:
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@
输出样例 1:
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $
输入样例 2:
& 3
@@@
@
@@@
输出样例 2:
bu yong dao le
&&&
&
&&&
问题分析
用两个字符指针储存对应的字符序列,在输入一个字符后,一个正着保存,一个倒着保存,然后再进行比较,如果相等,输出 bu yong dao le然后在进行除空格之外的字符替换,用替换之后的目标字符进行输出,空格原样输出,不相等对倒着的字符进行上述操作。
代码实现
#include<stdio.h>
int main(){
char x;//储存要替换为的字符
int n;//储存网格的规模
scanf("%c %d",&x,&n);
getchar();//将回车键读取,否则在读取字符时会出错
char *z=(char *)malloc(sizeof(char)*n*n);//z用来储存正着的字符表
char *d=(char *)malloc(sizeof(char)*n*n);//d用来储存倒着的字符表
for(int i=0;i<n;i++){//模拟行
for(int j=0;j<n;j++){//模拟列
char input;//读取一个字符先保存到input中
scanf("%c",&input);
z[i*n+j]=input;//正着储存input
d[(n-1-i)*n+n-1-j]=input;//倒着储存input
}
getchar();//每一行后面有一个换行符,将其读取否则会出现错误
}
int flag=1;//为1表示相等,为0表示不相等
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(z[i*n+j]!=d[i*n+j]){//对应比较每一个z与d中的字符,如果相等不会进入{}内的语句不会改变flag的值
flag=0;
break;
}
}
}
if(flag){//flag等于1表示倒过来与正着的字符一样
printf("bu yong dao le\n");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(z[i*n+j]!=' '){//等于空格原样输出,不等于空格输出替换的字符
printf("%c",x);
}else{
printf("%c",z[i*n+j]);
}
}
if(i!=n-1)//打印一行后进行换行操作
printf("\n");
}
}else{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(d[i*n+j]!=' '){//同上
printf("%c",x);
}else{
printf("%c",d[i*n+j]);
}
}
if(i!=n-1)
printf("\n");
}
}
return 0;
}
本文介绍了一个用于倒置汉字网格的程序设计方法。该程序能够根据用户输入的字符和网格大小,倒置由特定字符组成的N×N网格,并判断是否需要输出'buyongdaole'。适用于希望了解字符网格倒置算法的读者。
2330

被折叠的 条评论
为什么被折叠?



