Codeforces - 550C - Divisibility by Eight
题目链接
给你一个长度不超过 100
的数字,要你移去一些数字(也可以不移去),判断剩下的数字能不能被 8
整除,如果可以输出剩下的数字组成的数。如果不存在解,输出 NO
。
解析
这题没有想到,有一个关键点: 一个数要成为 8
的倍数,则后面三位数字成为 8
的倍数即可,所以只需要枚举 0~1000
的数即可,也就是在给出的数字中,三种循环枚举即可。
- 特判
0
、8
; - 判断
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论