360 2017笔试程序题

来源:互联网 发布:mp4淘宝 编辑:程序博客网 时间:2024/06/05 07:56

第一题

题意:给出一个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;}
0 0
原创粉丝点击