百度之星初赛一 补题

1001 小C的倍数问题

题意:

根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数。反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3的倍数。

现在给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数 的充分必要条件是每一位加起来的和是B的倍数。

我真是一句mmp啊   wcnmlgb 题目读了半天没读懂  后面的签到题也没心思写了

看了别人的题解  也算是明白了  自己真的是菜的可以啊

详细解答:http://blog.csdn.net/qq_36306833/article/details/77127051

#include <bits/stdc++.h>
using namespace std;

int main ()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        n--;
        int res = 0;
        int i=1;
        for(;i*i<n;i++)
        {
            if(n%i ==0 )
                res+=2;
        }
        if(i*i == n)
            res++;
        cout<< res <<endl;

    }
}

1006 度度熊的01世界

题意

度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成。

现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是。

图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且仅存在一个由0字符组成的连通块完全被1所包围。

图像1的定义:存在1字符且1字符只能是由一个连通块组成,不存在任何0字符组成的连通块被1所完全包围。

连通的含义是,只要连续两个方块有公共边,就看做是连通。

完全包围的意思是,该连通块不与边界相接触。

帮FB写 最后感觉没啥问题  wa在一个细节上 四周补0的时候   没写好 把N写成M了

GG

#include <bits/stdc++.h>
using namespace std;
int N,M;
char s[105][105];


int dx[]={-1,0,0,1}; //4个方向的
int dy[]={0,1,-1,0};
void dfs(int x,int y)
{
    s[x][y] = '#';
    for(int i=0;i<4;i++)
    {
        int fx = x+dx[i];
        int fy = y+dy[i];
        if(s[fx][fy]=='1'&& fx>=0 && fy<=M && fx<=N && fy>=0)
        {
            dfs(fx,fy);
        }
    }
}

void dfs0(int x,int y)
{
    s[x][y] = '#';
    for(int i=0;i<4;i++)
    {
        int fx = x+dx[i];
        int fy = y+dy[i];
        if(s[fx][fy]=='0'&& fx>=0 && fy<=M && fx<=N && fy>=0)
        {
            dfs0(fx,fy);
        }
    }
}
int main ()
{
    while (~scanf("%d %d ",&N,&M))
    {
        for(int i =1; i <=N ; i++)
        {
            scanf("%s",s[i]+1);
        }
        M++;N++;
        for(int i=0;i<=M;i++)
            s[0][i] = '0';
        for(int i=0;i<=N;i++)
            s[i][0] ='0';
        for(int i=0;i<=N;i++)
            s[i][M]='0';
        for(int i=0;i<=M;i++)
            s[N][i] ='0';
        int sum0=0 ,sum1 = 0;
        for(int i=0;i<=N;i++)
        {
            for(int j=0;j<=M;j++)
            {
                if(s[i][j]=='1')
                {
                    dfs(i,j);
                    sum1++;
                }
            }
        }
        for(int i=0;i<=N;i++){
            for(int j=0;j<=M;j++)
            {
                if(s[i][j]=='0')
                {
                    dfs0(i,j);
                    sum0++;
                }
            }
        }
        if(sum0 ==1 && sum1 == 1)
            cout << 1 <<endl;
        else if(sum0 ==2 && sum1 ==1 )
            cout << 0<<endl;
        else
            cout<<-1<<endl;
    }
    return 0;
}

1005 今夕何夕

题意
今天是2017年8月6日,农历闰六月十五。

小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。

为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。

小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
 
 
#include<bits/stdc++.h>
using namespace std;

bool is_run(int y)
{
    return ((y%4)==0&& (y%100)!=0 || y%400==0);
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int y,m,d;
        scanf("%d-%d-%d",&y,&m,&d);
        int sum =0;
        while (1){
            if(m==2 && d==29)
            {
                sum = (sum+365*4+is_run(y))%7;
                y = y+4;
                if(sum==0 && is_run(y)) break;
            }
            else
            {
                if(m>2)
                {
                    sum = (sum+365+is_run(y+1))%7;
                    y++;
                    if(sum==0) break;
                }
                else
                {
                    sum = (sum+365+is_run(y))%7;
                    y++;
                    if(sum==0) break;
                }
            }
        }
        printf("%d
",y);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Draymonder/p/7353207.html