题目是这样的,电脑随机产生五位数,如12345。人来猜数。人输入想猜的数字,如12256.机器输出结果2Y1N。Y表示位数相等且数字相等。N表示数字相等,位数不等。人有九次机会来猜。最后要求要保存前十名的成绩。
   题目大概就是这个意思。我写了一部分,但是有两个问题,我实在是无法解决。一,那个N该如何实现?Y的实现我是用5个IF去实现的。我把人输入的结果分成5个A,B,C,D,E。机器随机产生的数用5个数a,b,c,d,e组成。然后a==A,b==B.以此类推。N的实现我想应该可以用集合,把两组数,弄成集合,然后取交集。小弟,刚学部久。想破头都不会写。二,是保存前十名的成绩,应该是用IO来写吧。如果我有11个人来猜数。那如何来对比成绩,把成绩低的那位给覆盖掉呢?只是我现在的两个问题,求高人么多多指点,因为代码写在我笔记本上,现在无法贴出来,望各位能帮帮忙,谢谢了!
   我只有这么多分,还望多包涵~~~

解决方案 »

  1.   

    先逐位比较,得到Y
    剩下的就是345  256  ---然后拿第一组数(3)到第二组数里找相同的,找到相同的就删掉相同的,N++
    例如第一组数里(5)到第二组数找到相同的(5)。那么第二组数就变成 26,N再自加1
    如果数不止5位的话,建议用容器来实现比较成绩要先有策略,比如说Y对的数目优先级大于N对的数目(2Y0N>1Y4N)
    10个成绩也不多,用数组存吧,也是逐个比较,小的向后移
    如果数很大的话,比如10000,就用极小堆实现
      

  2.   

    N的判读感觉没多大区别,还是两个for循环,如果两个数相等而他们的位数不等,N++2.成绩的问题,你保存为文件,每次需要覆盖的时候把文件读出来,改了,再放回去...
      

  3.   

    public class TestBean { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
          int[]a={1,2,3,4,5};
          int[]b={1,2,4,5,6};
          int N=0,Y=0,i,j=0;
          for(i=0;i<5;i++)
           {
           if(a[i]==b[i])
           Y++;
           else
           {
           for(j=0;j<5;j++)
           if(i!=j&&a[i]==b[j])
           N++;
           }
           }
          System.out.println(Y);
          System.out.println(N);
    }}
      

  4.   

    8楼实现了N的查找,成绩的排序可以把YN提取出来做为一个两位数放入一个集合来排序
      

  5.   

    请参看我写的:
    http://blog.csdn.net/xtuxucj/archive/2009/08/18/4460797.aspx
    还是贴出来吧。import java.util.*;
    import java.io.*;public class GuessDigit {
        private ArrayList<Integer> digitArray ;
        private boolean flag = true;
        private static final int SIZE = 4;
        private static int count = 7;
       
       
        public GuessDigit(){
            this(GuessDigit.count);
        }
       
        public GuessDigit(int count){
           
            GuessDigit.count = count;
            digitArray = new ArrayList<Integer>(SIZE);
            Random r = new Random();
            int n = 0;
            while(n < SIZE){
               
                int i = r.nextInt(10);
                if(!digitArray.contains(i)){
                    digitArray.add(n, i);
                    n ++;
                }
            }
           
            System.out.println("请输入4个不同的数字,你一共有"+count+"次机会:");
        }
       
        public String toString(){
            String s = "";
            for(int i = 0; i < digitArray.size(); i ++){
                s += digitArray.get(i);
            }
            return s;
        }
       
        private void campare(String s){
            String array = toString();
            int A = 0, B = 0;
            char c1, c2;
            for(int i = 0 ;i < SIZE; i ++){
                c1 = array.charAt(i);           
                c2 = s.charAt(i);           
                if(c1 == c2){
                    A ++;
                }else if(array.indexOf(c2) != -1)
                    B ++;
            }
           
            System.out.println(s + " " + A + "A" + B + "B");
           
            if(A == SIZE){           
                System.out.println("恭喜你猜对了!数字是" + this);
                flag = false;
            }           
           
            if(--count == 0 && A < SIZE ){
                System.out.println("已达到规定次数,数字是:"+this);               
                flag = false;
            }
        }
       
        public void getConsole() throws IOException{
            BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
            String s ;
            boolean repeat;
            int i;
           
            while(flag){
                s = stdin.readLine();
                repeat = false;
                i = 0;
                if(s.matches("\\d{4}")){               
                    while(!repeat && i < SIZE-1){
                        if(s.lastIndexOf(s.charAt(i)) != i){
                                System.out.println("请输入4不同的数字:");
                                repeat = true;                                                       
                            }   
                        i ++;
                    }
                    if(!repeat)
                        campare(s);                
                }else
                    System.out.println("请检查输入值的格式:");
                          
            }
        }
       
        public static void main(String[] args) throws IOException {
            GuessDigit g = new GuessDigit();        ;
            //System.out.println(g);       
            g.getConsole();
        }
    }
      

  6.   

    public class Scores {
    private int Y;
    private int N;

    public Scores(){}

    public Scores(int Y, int N){
    this.Y = Y;
    this.N = N;
    }
    public int getY(){
    return Y;
    }

    public int getN(){
    return N;
    }

    public static Scores parseString(String score) throws Exception{
    Pattern pattern = Pattern.compile("Y[0-5]N[0-5]");
    Matcher matcher = pattern.matcher(score);
    if (!matcher.matches()){
    throw new Exception("invalide score");
    }
    return new Scores(Character.digit(score.charAt(1), 10),
    Character.digit(score.charAt(3), 10));
    }

    public String toString(){
    return "Y"+Y+"N"+N;
    }}public class test {
       
        public static void main(String args[]) {
         List<Scores> myList = new ArrayList<Scores>();   
         try {
         myList.add(Scores.parseString("Y1N1"));
         myList.add(Scores.parseString("Y1N2"));
         myList.add(Scores.parseString("Y1N3"));
         myList.add(Scores.parseString("Y2N1"));
         myList.add(Scores.parseString("Y2N2"));
         myList.add(Scores.parseString("Y3N2"));
         myList.add(Scores.parseString("Y3N1"));    
    } catch (Exception e) {
    e.printStackTrace();
    }
    Collections.sort(myList,new Comparator<Scores>(){
      public int compare(Scores s1, Scores s2) {
      return s1.getY() == s2.getY()?s2.getN() - s1.getN():s2.getY() - s1.getY();
      }
      });
    for (Scores s:myList){
    System.out.println(s.toString());
    }   
        }
        
    }
      

  7.   

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.Random;
    public class Game{

    private String resultStr;
    private String user;
    private static String FILENAME = "result.txt";
    public Game(String user) {
    this.user = user;
    resultStr = (new Random().nextInt(100000)) +"";
    System.out.println("result is:" + resultStr);
    }


    public static void main(String[] args) {
    Game game = new Game("zc");
    game.validate();
    } private boolean validateImpl(String line) {
    if(line == null || line.length() != 5) {
    return false;
    }

    int iparse = 0;
    try {
    iparse = Integer.parseInt(line);
    if(iparse < 0 || iparse >= 100000) {
    return false;
    }
    } catch (Exception e) {
    // TODO: handle exception
    }

    String str = iparse + "";
    if(str.length() != 5) {
    return false;
    }
    int absulteEqual = 0;
    ArrayList<Integer> list = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>();

    for(int i=0;i<resultStr.length();++i) {
    int c = resultStr.charAt(i);
    if(c == str.charAt(i)) {
    absulteEqual++;
    }else {
    list2.add(Integer.valueOf(str.charAt(i)));
    list.add(Integer.valueOf(c));
    }
    }

    StringBuilder sb = new StringBuilder();
    if(absulteEqual > 0) {
    sb.append(absulteEqual).append("Y");
    }else {
    sb.append("0Y");
    }

    int k=0;
    for (Iterator iterator = list2.iterator(); iterator.hasNext();) {
    Integer ele = (Integer) iterator.next();
    if(list.contains(ele)) {
    k++;
    }

    }
    sb.append(k).append("N");
    if(absulteEqual == 5 && k == 0) {
    return true;
    }

    System.out.println(sb.toString());
    return false;

    } public void validate() {
    String input = null;
    int times = 10;
    BufferedReader br = null;
    try {
    br = new BufferedReader(new InputStreamReader(System.in));
    while(times > 0 && (input = br.readLine()) != null) {
    if(validateImpl(input)) {
    save(times);
    System.out.println("guess right.");
    break;
    }
    times--;
    System.out.println("You have " + times + " to guess.");
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if(br != null)
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    private void save(int times) {
    File file = new File(FILENAME);
    String text = (new Date()).toLocaleString();
    String wrline = text + " " + user + " " + times;
    if(!file.exists()) {
    try {
    BufferedWriter bw = new BufferedWriter(new FileWriter(file));
    bw.write(wrline+"\n");
    bw.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }else {
    int lines = 0;
    ArrayList<ValueData> list = new ArrayList<ValueData>();
    list.add(new ValueData(wrline+"\n"));
    try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line = null;
    while((lines <= 10) && ((line=br.readLine()) != null)) {
    list.add(new ValueData(line));
    lines++;
    }
    br.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    ValueData data[] = list.toArray(new ValueData[] {});
    Arrays.sort(data);

    try {
    lines = 0;
    BufferedWriter bw = new BufferedWriter(new FileWriter(file));
    for(int i=0;i<data.length&&lines < 10;i++,lines++) {
    String content = data[i].line;
    if(content != null && !content.endsWith("\n")) {
    content += "\n";
    }
    bw.write(content);
    }
    bw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

    private static class ValueData implements Comparable{
    private String line;

    public ValueData(String line) {
    this.line = line;

    }

    public int compareTo(Object o) {
    if(!(o instanceof ValueData)) {
    throw new RuntimeException("o was not instanceof Value.class.");
    }

    ValueData v = (ValueData)o;

    String []lineValue = v.line.split(" ");
    String []lineValue2 = line.split(" ");

    return Integer.parseInt(lineValue[3].trim()) - Integer.parseInt(lineValue2[3].trim());
    }

    @Override
    public String toString() {
    return line;
    }
    }
    }
      

  8.   

    8楼是正解 你只要扩展一下 用Random产生随机数用Scanner接收字符串再转成int放入数组中20楼 好无私啊!