题目是这样的,电脑随机产生五位数,如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个人来猜数。那如何来对比成绩,把成绩低的那位给覆盖掉呢?只是我现在的两个问题,求高人么多多指点,因为代码写在我笔记本上,现在无法贴出来,望各位能帮帮忙,谢谢了!
我只有这么多分,还望多包涵~~~
题目大概就是这个意思。我写了一部分,但是有两个问题,我实在是无法解决。一,那个N该如何实现?Y的实现我是用5个IF去实现的。我把人输入的结果分成5个A,B,C,D,E。机器随机产生的数用5个数a,b,c,d,e组成。然后a==A,b==B.以此类推。N的实现我想应该可以用集合,把两组数,弄成集合,然后取交集。小弟,刚学部久。想破头都不会写。二,是保存前十名的成绩,应该是用IO来写吧。如果我有11个人来猜数。那如何来对比成绩,把成绩低的那位给覆盖掉呢?只是我现在的两个问题,求高人么多多指点,因为代码写在我笔记本上,现在无法贴出来,望各位能帮帮忙,谢谢了!
我只有这么多分,还望多包涵~~~
剩下的就是345 256 ---然后拿第一组数(3)到第二组数里找相同的,找到相同的就删掉相同的,N++
例如第一组数里(5)到第二组数找到相同的(5)。那么第二组数就变成 26,N再自加1
如果数不止5位的话,建议用容器来实现比较成绩要先有策略,比如说Y对的数目优先级大于N对的数目(2Y0N>1Y4N)
10个成绩也不多,用数组存吧,也是逐个比较,小的向后移
如果数很大的话,比如10000,就用极小堆实现
* @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);
}}
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();
}
}
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());
}
}
}
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;
}
}
}