CodeForces - 550C Divisibility by Eight

题意:给你一串数问你能不能选几个数组合起来的数被8整除

思路:位数很小,所以直接暴力就好了,判断能不能被8整除是看一个数的后三位,至于为什么要写这篇题解呢,是因为wa了一发,看了其他人的题解,学到了一些东西,就是在字符串读入的时候可以向后扩几位,把前面补为0,这样就不用考虑低于3位的情况,这方法真聪明。

代码:

#include <bits/stdc++.h>
using namespace std;
char a[1005];

int main()
{
    while(~scanf("%s",a+2))
    {
        a[0] = a[1] = ‘0‘;
        int len=strlen(a),s;
        int i,j,k,ok=0;
        for(i=0;i<len-2;i++){
            if(ok) break;
            for(j=i+1;j<len-1;j++){
                if(ok) break;
                for(k=j+1;k<len;k++){
                    s=(a[i]-‘0‘)*100+(a[j]-‘0‘)*10+a[k]-‘0‘;
                    if(s%8==0){
                        ok=1;
                        break;
                    }
                }
            }
        }
        if(ok)
            printf("YES\n%d\n",s);
        else
            printf("NO\n");
    }

    return 0;
}

原文地址:https://www.cnblogs.com/lalalatianlalu/p/8453801.html

时间: 2024-10-12 08:27:38

CodeForces - 550C Divisibility by Eight的相关文章

CodeForces 550C Divisibility by Eight(枚举)

[题目链接]click here~~ [题目大意] 给一个不超过100位的数字,要求能否删掉几位数,剩下的数能被8整除 [解题思路]:这里有个性质:如果一个数后三位能被8整除,那么这个数就能被8整除 证明:举一个5位数的例子吧, 例如 _____  _____  __              __  __                __  ___ abcde=ab000+cde=1000×ab+cde=8×125×ab+cde 很明显,8×125×ab一定是8或者125的倍数,因此当cde

Codeforces 922F Divisibility 构造

Divisibility 我们考虑删数字 首先我们可以发现有一类数很特殊就是大于 n / 2的素数, 因为这些素数的贡献只有1, 并且在n大的时候, 这些素数的个数不是很少, 我们可以最后用这些数去调整, 并且删掉一个数的时候删掉的是它的因子个数, 所以可以用素数去控制最后的数量.当n小的时候直接状压枚举. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak

CodeForces 597A Divisibility

水题. #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> #include<cstdio> using namespace std; long long k,L,R; int main() { scanf("%lld%lld%lld",&k,&L,&R); long

Codeforces 988E. Divisibility by 25

解题思路: 只有尾数为25,50,75,00的数才可能是25的倍数. 对字符串做4次处理,以25为例. a. 将字符串中的最后一个5移到最后一位.计算交换次数.(如果没有找到5,则不可能凑出25,考虑50.75.00) b. 字符串已经改变,将此时最后一个2移到倒数第二位.计算交换次数. (如果没有找到2,则也不可能凑出25,考虑50.75.00) c. 将除了最后两位之外的第一个非0的数字移到首位,计算交换次数.(如果找不到除了最后两位之外的非0数字,则不可能凑出25,考虑50.75.00)

Codeforces 566 F. Clique in the Divisibility Graph

Codeforces 566F 的传送门 As you must know, the maximum clique problem in an arbitrary graph is NP-hard. Nevertheless, for some graphs of specific kinds it can be solved effectively. Just in case, let us remind you that a clique in a non-directed graph is

数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight

题目传送门 1 /* 2 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <iostream> 8 #include <cmath> 9 #include <vector> 10 using namespace std; 11

Codeforces 566F Clique in the Divisibility Graph

http://codeforces.com/problemset/problem/566/F 题目大意: 有n个点,点上有值a[i], 任意两点(i, j)有无向边相连当且仅当 (a[i] mod a[j])==0||(a[j] mod a[i])==0 问这幅图中的最大连通子图是多少. 思路:直接转移,时间复杂度O(n^1.5) #include<cstdio> #include<cmath> #include<cstring> #include<algorit

Codeforces Round #486 (Div. 3) E. Divisibility by 25

E. Divisibility by 25 能被25整除的充要条件就是末两位是00,25,50,75.如果没有过程中不出现前导0这一限制,显然对每种情况,贪心取尽量低位即可.本题的关键就在于如何满足这个条件,首先有个"显然"的方法:讨论...然后会发现情况太多,过于复杂.所以,我们只好从交换本身的性质入手,找找易于实现的写法.注意到我们最多移动3个数字的位置,最终两个最低位的数,可能还有一个非0数作为最高位,而根据交换的性质,可以发现先移动那个数对于最终的结果没有影响,按照题意我们要先

Codeforces Round #306 (Div. 2)——C模拟——Divisibility by Eight

You are given a non-negative integer n, its decimal representation consists of at most 100 digits and doesn't contain leading zeroes. Your task is to determine if it is possible in this case to remove some of the digits (possibly not remove any digit