第一题
题意:给出一个3x3矩阵,判断该矩阵是否关于(2, 2)对称。
题解:。。。
代码:
#include <cstdio>
#include <iostream>
using namespace std;
char g[10][10];
int main()
{
while(~scanf("%s", &g[1][1]))
{
scanf("%s%s", &g[2][1], &g[3][1]);
int ok = 1;
for(int i = 1; i <= 3; i++)
{
for(int j = 1; j <= 3; j++)
if(g[i][j] != g[2*2-i][2*2-j]) { ok = 0; break; }
}
if(ok) printf("YES\n");
else printf("NO\n");
}
return 0;
}
第二题
题意:给出n,求出1到n中由0和1构成的数字个数。
题解:n(设有6位)如果第一位大于1,那么它包含的最大满足要求的数就是111111,个数可以用二进制去求。如果n的第一位<=1,就记录并向后扫,下一位如果大于1就跳出,相当于后面都是1了,如果下一位<=1,就要记录继续向后扫。。。最终会得到一个和n位数相同的数组,把这个数组看成一个二进制串,这个二进制串的值就是答案。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
char number[100];
int flag[100];
int main()
{
while(~scanf("%s", number))
{
int len = strlen(number), i, j;
for(i = 0; i < len; i++)
{
j = number[i] - '0';
if(j > 1) break;
if(j == 1) flag[i] = 1;
else flag[i] = 0;
}
for(int k = i; k < len; k++) flag[k] = 1;
int o = 0;
for(int i = 0; i < len; i++)
{
o <<= 1;
o |= flag[i];
}
cout << o << endl;
}
return 0;
}