“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @
或者为空格。而倒过来的汉字所用的字符由裁判指定。
输入格式:
输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @
或者为空格。
输出格式:
输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le
,然后再用输入指定的字符将其输出。
输入样例 1:
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@
输出样例 1:
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $
输入样例 2:
& 3
@@@
@
@@@
输出样例 2:
bu yong dao le
&&&
&
&&&
#include <bits/stdc++.h>
using namespace std;
int main()
{
char c,s;
int Map[105][105];
memset(Map,0,sizeof Map);
int n;
scanf("%c %d",&c,&n);
for(int i = 1; i <= n; i++)
{
getchar(); //获取最后的换行
for(int j = 1; j <= n; j++)
{
scanf("%c",&s); //单个字符逐渐输入
if(s == '@')
Map[i][j] = 1;
}
}
bool judge = 1;
int cnt = 0;
for(int i = 1; i <= n/2+1; i++)
{
for(int j = 1; j <= n; j++)
{
cnt++;
if(cnt > (n*n)/2)
break;
if(Map[i][j] != Map[n+1-i][n+1-j])
{
judge = 0;
Map[i][j] = (Map[i][j]+1)%2;
Map[n+1-i][n+1-j] = (Map[n+1-i][n+1-j]+1)%2;
}
}
}
if(judge)
cout << "bu yong dao le"<<endl;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
if(Map[i][j] == 1)
printf("%c",c);
else
cout<<" ";
cout<<endl;
}
return 0;
}
更多的输入方式:
string 类型 直接获取一行
char c;
string s[105];
int n,Map[105][105];
memset(Map,0,sizeof Map);
scanf("%c %d",&c,&n);
getchar(); //获取换行符
for(int i = 1; i <= n; i++)
{
getline(cin,s[i]); //每次获取一行
for(int j = 0; j < s[i].length(); j++)
if(s[i][j] == '@')
Map[i][j+1] = 1;
}
char 类型数组 直接获取一行
为了避免缓冲区溢出,从终端读取输入时应当用fgets()代替gets()函数。
但是这也将带来一个问题,因为fgets()的调用格式是:
fgets (buf, MAX, fp)
fgets (buf, MAX, stdin)
buf是一个char数组的名称,MAX是字符串的最大长度,fp是FILE指针。
fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的字符,或者读取到文件结尾。
fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。
字符串的结尾处可能多出一个换行符,我们需要把它去掉。
扫描二维码关注公众号,回复:
5668438 查看本文章
char c,s[105];
int n,Map[105][105];
memset(Map,0,sizeof Map);
scanf("%c %d",&c,&n);
getchar(); //处理掉换行
for(int i = 1; i <= n; i++)
{
fgets(s,105,stdin);
for(int j = 0; j < strlen(s); j++)
if(s[j] == '@')
Map[i][j+1] = 1;
}