[quote]猜数字的游戏,很多人都玩过吧,规则是这样的:随机产生一个由4个不同数字串,如0257。玩家输入自己猜测的数字如:4567,此时系统将给出提示 1a1b,1a表示有猜中一个数字,且位置正确(7),1b表示猜中一个数字,且位置不正确,如此猜下去,直到所猜数字返回4a0b为止。
现在转换角色,让程序来玩这个游戏,用户输入10个不同的A-Z的字母,然后程序猜测这10个字母是什么样的排列组合,平台将告知程序xayb,让程序尽量用最少的次数解出答案。[/quote]
先作出一个出题机。
[code]package com.maodajun.javaeye2;
public class GuessNumber {
String primitive ="";
public GuessNumber(String primitive){
this.primitive=primitive;
}
public GuessNumber(){
List list = new ArrayList();
String primitive = "";
for(int i = 0 ; i < 26 ; i ++){
char tmp = (char) ('A'+i);
list.add( Character.toString(tmp));
}
int j =-1;
for(int i = 0 ; i <10 ; i++){
j =r.nextInt(list.size());
primitive+=list.remove(j);
}
this.primitive=primitive;
}
public String guessOne(String guessone){
if(primitive.equalsIgnoreCase(guessone) ){
return primitive.length()+"a"+0+"b";
}
char[] oldchars = primitive.toCharArray();
char[] guesschars = guessone.toCharArray();
int a = 0 ;
int b =0;
for(int i = 0 ; i < oldchars.length ||i < guesschars.length ; i++ ){
if(oldchars[i]==guesschars[i]){
oldchars [i ]= '0';
guesschars[i]='0';
a++;
}
}
for(int i = 0 ; i < oldchars.length ; i ++){
if(guessone.indexOf(oldchars[i])>0){
b++;
oldchars[i]='0';
}
}
return a+"a"+b+"b";
}
}
[/code]
测试 代码:
[code]package com.maodajun.javaeye2;
import junit.framework.TestCase;
public class GuessNumberTest extends TestCase {
public GuessNumber gn= null;
public static void main(String[] args) {
junit.textui.TestRunner.run(GuessNumberTest.class);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
/*
* Test method for 'com.maodajun.javaeye2.GuessNumber.guessOne(String)'
*/
public void testGuessOne() {
gn = new GuessNumber("ABCD");
assertEquals("4a0b",gn.guessOne("ABCD"));
assertEquals("0a0b",gn.guessOne("EFGH"));
assertEquals("1a0b",gn.guessOne("AEFG"));
assertEquals("0a1b",gn.guessOne("EAFG"));
}
}
[/code]
现在转换角色,让程序来玩这个游戏,用户输入10个不同的A-Z的字母,然后程序猜测这10个字母是什么样的排列组合,平台将告知程序xayb,让程序尽量用最少的次数解出答案。[/quote]
先作出一个出题机。
[code]package com.maodajun.javaeye2;
public class GuessNumber {
String primitive ="";
public GuessNumber(String primitive){
this.primitive=primitive;
}
public GuessNumber(){
List list = new ArrayList();
String primitive = "";
for(int i = 0 ; i < 26 ; i ++){
char tmp = (char) ('A'+i);
list.add( Character.toString(tmp));
}
int j =-1;
for(int i = 0 ; i <10 ; i++){
j =r.nextInt(list.size());
primitive+=list.remove(j);
}
this.primitive=primitive;
}
public String guessOne(String guessone){
if(primitive.equalsIgnoreCase(guessone) ){
return primitive.length()+"a"+0+"b";
}
char[] oldchars = primitive.toCharArray();
char[] guesschars = guessone.toCharArray();
int a = 0 ;
int b =0;
for(int i = 0 ; i < oldchars.length ||i < guesschars.length ; i++ ){
if(oldchars[i]==guesschars[i]){
oldchars [i ]= '0';
guesschars[i]='0';
a++;
}
}
for(int i = 0 ; i < oldchars.length ; i ++){
if(guessone.indexOf(oldchars[i])>0){
b++;
oldchars[i]='0';
}
}
return a+"a"+b+"b";
}
}
[/code]
测试 代码:
[code]package com.maodajun.javaeye2;
import junit.framework.TestCase;
public class GuessNumberTest extends TestCase {
public GuessNumber gn= null;
public static void main(String[] args) {
junit.textui.TestRunner.run(GuessNumberTest.class);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
/*
* Test method for 'com.maodajun.javaeye2.GuessNumber.guessOne(String)'
*/
public void testGuessOne() {
gn = new GuessNumber("ABCD");
assertEquals("4a0b",gn.guessOne("ABCD"));
assertEquals("0a0b",gn.guessOne("EFGH"));
assertEquals("1a0b",gn.guessOne("AEFG"));
assertEquals("0a1b",gn.guessOne("EAFG"));
}
}
[/code]