• 牛客网编程练习之编程马拉松:鸽兔同校


    题目描述

    浙江大学校园里绿树成荫,环境非常舒适,因此也引来一批动物朋友来此居住。
    童心未泯的NowCoder就经常带些碎面包什么的去广场喂鸽子和兔子,并和它们玩耍。 一点也没有大学生的样子,还是一副老不正经的样子,呵呵。
    随着鸽子和兔子数目的增多,NowCoder带的那点食物已经不够它们瓜分了。为了能让自己的好朋友吃的饱饱的, NowCoder决定统计一下有多少只鸽子和有多少只兔子,以便带来足够的食物。一、二、三、四、五...他开始数了。
    现在,他已经知道有这些鸽子和兔子一共有n个头和m只脚。请你帮他写个程序计算一下一共有多少只鸽子和兔子。

    输入描述:

    输入包括多组数据。

    每行包括2个正整数n和m,n和m可能会很大,超过2^64,但位数不超过100位。

    输出描述:

    每组数据的输出都只有一行,分别是鸽子的数量和兔子数量。

    如果输入的测试数据不能求得结果,那肯定是NowCoder这个马大哈数错了,就输出“Error”提示他。

    示例1

    输入

    35 94
    1 3

    输出

    23 12
    Error

    思路:

    此类问题暴力破解不是个好办法,想办法从数学的角度来解决。

    假设鸽子有x只,兔子有y只,则得到方程组:

    x+y=n  ①

    x*2+y*4=m ②

    将①变换带入②式,得:

    (n-y)*2+y*4=m

    2n-2y+4y=m

    2n+2y=m

    y=(m-2n)/2  ③

    将读入的n和m带入③式,看有没有有效解即可。

    只是有两个地方需要注意一下:

    1. 使用大数运算

    2. x和y的值只能是正整数

    AC代码:

    import java.math.BigInteger;
    import java.util.Scanner;
    
    /**
     * @author CC11001100
     */
    public class Main {
    
    	public static void main(String[] args) {
    
    		Scanner sc = new Scanner(System.in);
    		while (sc.hasNextBigInteger()) {
    			BigInteger n = sc.nextBigInteger();
    			BigInteger m = sc.nextBigInteger();
    
    			BigInteger t = m.subtract(n.multiply(BigInteger.valueOf(2)));
    			if (t.mod(BigInteger.valueOf(2)).intValue() != 0) {
    				System.out.println("Error");
    				continue;
    			}
    
    			BigInteger y = t.divide(BigInteger.valueOf(2));
    			BigInteger x = n.subtract(y);
    
    			if(x.compareTo(BigInteger.ZERO)<0 || y.compareTo(BigInteger.ZERO)<0){
    				System.out.println("Error");
    				continue;
    			}
    
    			System.out.println(x + " " + y);
    
    		}
    
    	}
    
    }
    

    题目来源: https://www.nowcoder.com/practice/5db1728ebfec4206bad8c3eee431faf9?tpId=3&tqId=10874&tPage=1&rp=&ru=/ta/hackathon&qru=/ta/hackathon/question-ranking

  • 相关阅读:
    Android JNI 本地开发接口
    Android 主题切换 小结
    Android 屏幕适配
    android 中获取视频文件的缩略图(非原创)
    android 多媒体数据库(非原创)
    Android tween 动画 XML 梳理
    activity 四种启动模式
    Activity 横竖屏切换
    Android Activity 管理 (AppManager)(非原创)
    Android moveTaskToBack(booleannon Root)
  • 原文地址:https://www.cnblogs.com/cc11001100/p/8040700.html
Copyright © 2020-2023  润新知