首页 > 代码库 > 百度之星初赛一 补题

百度之星初赛一 补题

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\n",y);    }    return 0;}

 

百度之星初赛一 补题