出题

链接: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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章