田忌赛马Java解答

你一定听过田忌赛马的故事吧? 
    如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两银子,平局的话不输不赢。 请问田忌最多能赢多少银子?

关于输入: 
  输入包含多组测试数据,每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马。接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐王的马的速度。 输入的最后以一个0表示结束。

关于输出:

对每组数据,输出一个整数,表示田忌至多可以赢多少银子,如果田忌赢不了,就输出一个负数,表示田忌最少要输多少银子。

例子输入:


92 83 71 
95 87 74 

20 20 
20 20 

20 19 
22 18 
0

例子输出: 
200 

0

package tianjisaima;

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
 public class Main{
    public static void main(String args[]){
        int n, m;
        List<Integer>  list1=new ArrayList<Integer>();
        List<Integer>  list2=new ArrayList<Integer>();
        Scanner in=new Scanner(System.in);

        while(true){
          n=in.nextInt();
          if(n==0) break;

            //输入数据
            for(int i = 0; i < n; ++i)
            {
                list1.add(in.nextInt());
            }
            for(int i = 0; i < n; ++i)
            {
                 list2.add(in.nextInt());
            }
            //处理数据
            Collections.sort(list1);
            Collections.sort(list2);  

            int i=0, j=0, x=n-1, y=n-1,count=0;
            boolean bLast=true;  

            while(bLast)
            {
                //是否是最后一匹马
                if(x==i)
                    bLast=false;  

                if(list1.get(x) > list2.get(y))
                {//如果田忌当前最好的马可以胜齐王最好的马,那么比一场
                    x--;
                    y--;
                    count+=200;
                }
                else if(list1.get(i)> list2.get(j))
                {//如果田忌当前最差的马可以胜齐王最差的马,那么比一场
                    i++;
                    j++;
                    count += 200;
                }
                else
                {//否则,让田忌最差的马和齐王最好的好比一场
                    if(list1.get(i) < list2.get(y))
                        count -= 200;
                    i++;
                    y--;
                }
            }
           System.out.println(count);
           list1.clear();           list2.clear();
        }  

       }
    }
时间: 2024-04-21 02:09:15

田忌赛马Java解答的相关文章

acm hdu p1021 Fibonacci Again java解答 水水 找规律

Fibonacci Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 44697    Accepted Submission(s): 21341 Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n)

几个面试经典算法题Java解答

题目一: public class testClockwiseOutput { //顺时针打印一个矩阵 @Test public void test(){ int[][] num = new int[100][100]; int n = 4; int count =1; for(int i=0;i<n;i++){ for(int j =0;j<n;j++){ num[i][j]=count++; } } output(num,0,n-1); } public void output(int[]

Java位运算经典实例

一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补码不同,例如-5:            -5的源码:10000101            -5的反码:111111010 (取反操作)            -5的补码:111111011 (补码加1操作) 计算机所有数据都以补码存储和运算. 二 位操作       位操作包含&,|,!分别表示

2015考研 杭电 计算机学院 复试笔试题第一题 JAVA语言解法

杭电 2015年考研 计算机学院 复试笔试第一题 JAVA解法 import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /* 杭电2015年 计算机学院 复试 笔试题第一题 JAVA解答 * author 刘汪洋 QQ 605283073 * 求出:字符串如:"34223abd#34SB-11--" * 中整数的和 其中-在数字前表示负号,否则为字符 */ pub

美团2015校招研发笔试题——字母排序

题目来源牛客网: http://www.nowcoder.com/questionTerminal/3c334863c02443cdb61b2d73c1edf071?orderByHotValue=0&query=一组随机排列的字母数组&done=0&pos=9 一组随机排列的字母数组.请编写一个时间复杂度为O(n)的算法,使得这些字母按照字母从小到大顺序排好. 说明:字母区分大小写,相同的字母,排序后小写排在大写前. 例如:R,B,B,b,W,W,B,R,B,w 排序为:b,B,

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

【字符编码】Java字符编码详细解答及问题探讨

一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 直接上代码进行分析似乎更有感觉.   运行结果:   说明:通过结果我们知道如下信息. 1. 在Java中,中文在用ASCII码表示为3F,实际对应符号'?',用ISO-8859-1表示为3F,实际对应符号也是为'?',这意味着中文已经超出了ASCII和ISO-8859-1的表示范围. 2. UTF

OpenLDAP使用疑惑解答及使用Java完成LDAP身份认证

导读 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化.目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力.目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略.而目录服务的更新则一般都非常简单.这种目录可以存储包括个人信息.web链结.jpeg图像等各种信息.为了访问存储在目录中的信息,就

算法笔记_111:第五届蓝桥杯软件类省赛真题(Java本科A组)试题解答

 目录 1 猜年龄 2 李白打酒 3 神奇算式 4 写日志 5 锦标赛 6 六角填数 7 绳圈 8 兰顿蚂蚁 9 斐波那契 10 波动数列   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 猜年龄 标题:猜年龄 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍".小明又补充说:"她们可不是双胞胎,年龄差肯定也不超过8岁啊." 请你写出:小明的较小的妹妹的年龄. 注意: 只写一个人的年龄数