链接:https://ac.nowcoder.com/acm/contest/332/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小B准备出模拟赛。
她把题目按难度分为四等,分值分别为6,7,8,9。
已知小B共出了m道题,共n分。
求小B最少出了多少道6分题。
输入描述:
两个正整数n,m
输出描述:
一个数,表示答案。
若无解,输出"jgzjgzjgz"。
示例1
输入
复制
34 5
输出
复制
1
示例2
输入
复制
32 5
输出
复制
3
示例3
输入
复制
5 1
输出
复制
jgzjgzjgz
备注:
n,m\le 10^{12}
思路:最开始的时候意识到只有在6n到7n之内的闭区间才有可能有6,到时并没有注意到数学规律,挺可惜的一题
错误代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger n=sc.nextBigInteger();
BigInteger m=sc.nextBigInteger();
BigInteger tmp=new BigInteger("0");
BigInteger tmp1=new BigInteger("6");
BigInteger tmp2=new BigInteger("7");
BigInteger tmp3=new BigInteger("5");
BigInteger tmp4=new BigInteger("9");
if(m.multiply(tmp1).compareTo(n)>0 || m.multiply(tmp4).compareTo(n)<0)
System.out.println("jgzjgzjgz");
else if(n.divide(m).compareTo(tmp1)==0 && n.mod(m).compareTo(tmp)==0)
System.out.println(n.divide(m));
else if(m.multiply(tmp2).compareTo(n)>0 && m.multiply(tmp1).compareTo(n)<0) {
System.out.println((m.multiply(tmp2).subtract(n)));
}else
System.out.println(0);
sc.close();
}
}
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n=sc.nextLong();
long m=sc.nextLong();
if(n<m*6 || n>m*9)
System.out.println("jgzjgzjgz");
else if(n>=m*7)
System.out.println(0);
else
System.out.println(m-n%m);
}
}