Codeforces - 550C - Divisibility by Eight

发布于 2024-09-01 17:57:29 字数 2553 浏览 9 评论 0

题目链接

给你一个长度不超过 100 的数字,要你移去一些数字(也可以不移去),判断剩下的数字能不能被 8 整除,如果可以输出剩下的数字组成的数。如果不存在解,输出 NO

解析

这题没有想到,有一个关键点: 一个数要成为 8 的倍数,则后面三位数字成为 8 的倍数即可,所以只需要枚举 0~1000 的数即可,也就是在给出的数字中,三种循环枚举即可。

  • 特判 08
  • 判断 10~99 之间的数;
  • 判断 100 ~ 999 之间的数;
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    static int getThreeDigit(char a, char b, char c){
        return (a - '0')*100 + (b - '0')*10 + c-'0';
    }
    static int getTwoDigit(char b, char c){
        return  (b - '0')*10 + c-'0';
    }
    
    public static void main(String[] args) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        String str = cin.next();
        int len = str.length();
        char[] chs = str.toCharArray();
        for (int i = 0; i < len; i++) {
            if (chs[i] == '0' || chs[i] == '8') {
                System.out.println("YES");
                System.out.println(chs[i]);
                return;
            }
        }
        // O(1000000)
        for(int i = 0; i < len; i++){
            for(int j = i+1; j < len; j++){
                int ij = getTwoDigit(chs[i], chs[j]);
                if(ij%8 == 0){
                    System.out.println("YES");
                    System.out.println(ij);
                    return;
                }
                for(int k = j+1; k < len; k++){
                    int ik = getTwoDigit(chs[i], chs[k]);
                    if(ik%8 == 0){
                        System.out.println("YES");
                        System.out.println(ik);
                        return;
                    }
                    int jk = getTwoDigit(chs[j], chs[k]);
                    if(jk%8 == 0){
                        System.out.println("YES");
                        System.out.println(jk);
                        return;
                    }
                    int digit = getThreeDigit(chs[i], chs[j], chs[k]);
                    if(digit%8 == 0){
                        System.out.println("YES");
                        System.out.println(digit);
                        return;
                    }
                }
            }
        }
        System.out.println("NO");
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

命硬

暂无简介

0 文章
0 评论
357 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文