邯郸普通网站建设,那家公司装修比较好,通过数字化营销搭建网络建设,wordpress 所有页面空白页前言#xff1a;内容包括#xff1a;题目#xff0c;代码实现#xff0c;大致思路#xff0c;代码解读
题目#xff1a;
“福”字倒着贴#xff0c;寓意“福到”。不论到底算不算民俗#xff0c;本题且请你编写程序#xff0c;把各种汉字倒过来输出。这里要处理的每…前言内容包括题目代码实现大致思路代码解读
题目
“福”字倒着贴寓意“福到”。不论到底算不算民俗本题且请你编写程序把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的网格中的元素或者为字符 或者为空格。而倒过来的汉字所用的字符由裁判指定。
输入格式
输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N 不超过100的正整数其间以 1 个空格分隔随后 N 行每行给出 N 个字符或者为 或者为空格。
输出格式
输出倒置的网格如样例所示。但是如果这个字正过来倒过去是一样的就先输出bu yong dao le然后再用输入指定的字符将其输出。
输入样例 1
$ 9 输出样例 1
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$$$$ $$$$ $ $ $$$ $$$
$$$$$ $ 输入样例 2 3输出样例 2
bu yong dao le代码实现
#includestdio.h
int main()
{char ch 0;int n 0;char arr[100][100]{0};scanf(%c %d,ch,n);int flag1;getchar();int i 0;//存入汉字for(i0;in;i){int j 0;for(j0;jn;j){arr[i][j]getchar();}getchar();}//判断正过来和倒过去是否一样for(i0;in;i){int j 0;for(j0;jn;j){if(arr[i][j]!arr[n-i-1][n-j-1]){flag0;}}}if(flag1){printf(bu yong dao le\n);}//倒序打印逆序打印for(in-1;i0;i--){int j 0;for(jn-1;j0;j--){if(arr[i][j]32){printf( );}else{printf(%c,ch);}}printf(\n);}return 0;
}
大致思路 1 要实现汉字倒过来的效果需要从最后一行开始打印并逆序这一行使用循环 2 判断正过来倒过去是否一样 某一行和其对应的行数某一行的下标它对应的行数的下标总行数-1进行比较 某一行的最开始的字符和对应的行数的最后的字符比较然后依次遍历比较若是发现有不相同的则说明有必要倒置若是发现全部都相同则打印无需倒置的信息bu yong dao le 比如 总行数是3 第一行的下标是0 其对应的行数是第三行下标为2 023-1 红色方框之间进行比较橙色方框之间进行比较
代码解读
part 1 char ch 0;int n 0;char arr[100][100]{0};scanf(%c %d,ch,n);int flag1;getchar();
使用二维数组arr存储组成汉字的字符
使用flag来标记正过来和倒过去的字符是否相同若是相同则flag还是初始值1若是不同则flag置成0
注意在输入二维数组的行数和列数后使用的都是同一个数字需要使用getchar读走数字后的\n
这样在下面使用getchar一个一个读取用户输入的字符后确保读取的都是有效字符
part 2存入汉字 int i 0;for(i0;in;i){int j 0;for(j0;jn;j){arr[i][j]getchar();}getchar();}
使用getchar一个一个字符的读取
注意:在读取完一行的字符后需要再使用一个getchar读走换行符\n
part 2判断正过来和倒过去的汉字是否一样 //判断正过来和倒过去是否一样for(i0;in;i){int j 0;for(j0;jn;j){if(arr[i][j]!arr[n-i-1][n-j-1]){flag0;}}}
比如 我们现在要判断整个矩阵正过来和倒过去是否一样需要行数之间两两比较
行数0和行数2比较 行数1 和行数1比较
因为02总行数3-1 11总行数3-1
行数之间的两两比较由于倒过去的汉字是以正着的汉字的最后一行的最后一个字符作为第一行的第一个字符故而我们需要两行的字符交叉比较
红色方框之间比较橙色方框之间比较……
part 3倒序逆序打印 if(flag1){printf(bu yong dao le\n);}//倒序打印逆序打印for(in-1;i0;i--){int j 0;for(jn-1;j0;j--){if(arr[i][j]32){printf( );}else{printf(%c,ch);}}printf(\n);}
倒过来的汉字是从正着的汉字的最后一行开始打印并且需要逆序这一行的字符
空格的ASCII码值是32若是二维数组中的某个空间存放的是空格则输出空格