CSDN轻松周赛赛题:能否被8整除

题目意思:

给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除。输入格式:多组数据,每组数据是一个非负整数。非负整数的位数不超过10000位。输出格式每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数。注意: 重排可以让0开头。

题目分析:

判断一个数是否能够被8整除,只需要判断这个数的后三位是否能够整除8即可,对于此题需要模拟判断所有的后三位数重排的六个数是够被8整除,只是注意一位数和两位数的时候需要自己判断。

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int ff(char a,char b,char c){//判断三个数字组成的数能否被8整除
    int s[7];
    s[1]=(a-'0')*100+(b-'0')*10+(c-'0');
    s[2]=(a-'0')*100+(c-'0')*10+(b-'0');
    s[3]=(b-'0')*100+(c-'0')*10+(a-'0');
    s[4]=(b-'0')*100+(a-'0')*10+(c-'0');
    s[5]=(c-'0')*100+(a-'0')*10+(b-'0');
    s[6]=(c-'0')*100+(b-'0')*10+(a-'0');
    for(int i=1;i<=6;i++){
        //cout<<s[i]<<endl;
        if(s[i]%8==0) return 1;
    }
    return 0;
}
char s[10005];
int main()
{
    while(scanf("%s",s)!=EOF){
        int len=strlen(s);
        int ok=0;
        if(len==1){
            if((s[0]-'0')%8==0) ok=1;
        }
        else if(len==2){
            if(((s[0]-'0')*10+(s[1]-'0'))%8==0) ok=1;
            if(((s[1]-'0')*10+(s[0]-'0'))%8==0) ok=1;
        }
        else {
            for(int i=0;i<len;i++){
                if(ff(s[i],s[(i+1)%len],s[(i+2)%len])){
                    ok=1; break;
                }
            }
        }
        if(ok) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}
时间: 2024-10-14 06:31:14

CSDN轻松周赛赛题:能否被8整除的相关文章

CSDN 轻松周赛赛题:能否被8整除

轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数.注意: 重排可以让0开头. 答题说明 输入样例   610 122 输出样例   YES NO 解释   第一个数可以变为016 , 160 解题:很水的一道题...思路很简单,1000是能被8整除的,所以一千的倍数都能被

轻松周赛赛题:能否被8整除

练习题链接:http://student.csdn.net/mcs/programming_challenges 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数.注意: 重排可以让0开头 今天一个小学弟问我这道题怎么做,我直接回答他将数字全排列,验证是否可被8整除,例如123的全排列:123.231.312

hdu 4089 不错的DP 北京现场赛题

http://acm.hdu.edu.cn/showproblem.php?pid=4089 还有疑惑,需要重新推: 但是学到的: 1.A=a+b+c  abc是三种情况,那么P(A)=a*P(a->事件)+b*P(b->事件)+c*P(c->事件); a->事件意思是 在a情况下的事件,就是全概率公式的思想吧 2.一定注意每一步会不会出现分母为0 的情况,以及预处理的时候对于一些特殊情况导致自己的式子会出现分母为0的排除掉 3.概率DP经常出现推出了式子但是自己不会写代码的情况,

O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)

事先声明,这不是华为软挑的软广,我也不是海军. 这篇文章纯粹是心血来潮,原因是去年上传到github的参赛代码,前几天又有两个人star和fork了. 记得star热潮还是去年4月复赛刚结束的那几天,厚着脸皮在八大赛区的群里发消息求关注,之后就陷入了无限吃灰期.结果,我的开源代码在前几天突然又被挖出来了. 看了下时间,我想大概是有同学在准备今年的比赛,尝试研究去年的题目和开源代码.说实话,即使你愿意花很长时间来准备,效果也有限. 因为看往年的题目很容易陷进去,等到真正比赛发现意义不大.另外,很少

CSU OJ 1112机器人的指令 (湖南省12年省赛题)

 Welcome to CSU Online Judge! 1112: 机器人的指令 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 274  Solved: 97 [Submit][Status][Web Board] Description 数轴原点有一个机器人.该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置. ·LEFT:往左移动一个单位 ·RIGHT: 往右移动一个单位 ·SAME AS i: 和第i 条执行相同的

Go Deeper(2010成都现场赛题)(2-sat)

G - Go Deeper Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Here is a procedure's pseudocode: go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + x[b[dep]] != c[dep] then go(dep +

Error Curves(2010成都现场赛题)

F - Error Curves Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a method called Linear Discriminant Analysis, which h

山东省赛题 NEU OJ 1444 线段树双标记

http://acm.neu.edu.cn/hustoj/problem.php?id=1444 OJ问题论坛发帖http://t.cn/zjBp4jd FAQ http://t.cn/zjHKbmN Linux问题看http://t.cn/aWnP1n 1444: Devour Magic 时间限制: 1 Sec  内存限制: 256 MB 提交: 129  解决: 21 [提交][状态][讨论版] 题目描述 In Warcraft III, Destroyer is a large flyi

一道PK赛题

Problem Description I think that you might have played the traditional Chinese ring game: The Chinese Linking Rings (here we call its nickname Jiulianhuan —— “九连环”). Well, you say you haven’t played it before? Then you must have seen it before, right