CF#306-C - Divisibility by Eight-数学+暴力

来源:互联网 发布:隔音玻璃效果好吗 知乎 编辑:程序博客网 时间:2024/05/16 19:26

给出n位数,最多100

要求你随意去掉其中几个数 (可以完全不去掉)

然后如果剩下的数字组成的数能被8整除,输出YES和那个数,否则输出NO

分情况

不超过3位的直接暴力

超过三位的 根据

如果一个数的末三位数能被8整除,那么,这个数就一定能被8整除


.暴力三层for....(这样最后只留下三位数)

还有种情况是最后剩下2位数。。。暴力两层for (这样最后只留下2位数)


注意判断前导零的情况。要就是最后留下三位或者两位 但不能有前导零


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <set>#include <vector>using namespace std;#define inf 1e9+1char tm[105];int sb[105];int main(){    int i,j,k;    scanf("%s",tm+1);    int n=strlen(tm+1);    int flag=0;    int flag2=0;    for (i=1;i<=n;i++)    {        sb[i]=tm[i]-'0';         if (sb[i]==8 )            flag=1;            if (sb[i]==0 )            flag2=1;    }    if (flag)    {        printf("YES\n8\n");        return 0;    }    if (flag2)    {        printf("YES\n0\n");        return 0;    }    if (n<3)    {        if (n==1)        {            if (sb[1]==8||sb[1]==0 )                  printf("YES\n%d\n",sb[1]);            else                printf("NO\n");        }        else        {            if (sb[1]==8||sb[2]==8||(sb[1]*10+sb[2])%8==0||sb[2]==0)            {                if (sb[2]==0)                    printf("YES\n0\n");                else if (sb[1]==8||sb[2]==8)                    printf("YES\n8\n");                else                    if ( (sb[1]*10+sb[2])%8==0)                        printf("YES\n%d%d\n",sb[1],sb[2]);                                }            else                printf("NO\n");        }        return 0;    }    for (i=1;i<=n;i++)    {        for (j=i+1;j<=n;j++)        {            for (k=j+1;k<=n;k++)            {                if ((sb[i]*100+sb[j]*10+sb[k]*1)%8==0&&sb[i]!=0)                {                    printf("YES\n");                    printf("%d%d%d\n",sb[i],sb[j],sb[k]);                    return 0;                 }            }        }    }    for (i=1;i<=n;i++)    {        for (j=i+1;j<=n;j++)        {            if ((sb[i]*10+sb[j]*1)%8==0&&sb[i]!=0)                 {                    printf("YES\n");                    printf("%d%d\n",sb[i],sb[j]);                    return 0;                 }        }    }        printf("NO\n");        return 0;    }


0 0
原创粉丝点击