2007-08-03
猜数字游戏
关键字: 代码引用
猜数字的游戏,很多人都玩过吧,规则是这样的:随机产生一个由4个不同数字串,如0257。玩家输入自己猜测的数字如:4567,此时系统将给出提示 1a1b,1a表示有猜中一个数字,且位置正确(7),1b表示猜中一个数字,且位置不正确,如此猜下去,直到所猜数字返回4a0b为止。
现在转换角色,让程序来玩这个游戏,用户输入10个不同的A-Z的字母,然后程序猜测这10个字母是什么样的排列组合,平台将告知程序xayb,让程序尽量用最少的次数解出答案。
现在转换角色,让程序来玩这个游戏,用户输入10个不同的A-Z的字母,然后程序猜测这10个字母是什么样的排列组合,平台将告知程序xayb,让程序尽量用最少的次数解出答案。
先作出一个出题机。
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";
}
}
测试 代码:
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"));
}
}
评论
Lich_Ray
2007-08-16
LS 明明只写了一个出题目的游戏...我怎么可能没看清原题。
PS: 区别不是很大?你那个版本不但只能猜字母,而且还只能猜4个字母;而我写的可以猜任意个数的同类型常量,比如 game = startGame "BODXA"。/* smile */ 这道 AI 的题应该也不难,以后再说。
PS: 区别不是很大?你那个版本不但只能猜字母,而且还只能猜4个字母;而我写的可以猜任意个数的同类型常量,比如 game = startGame "BODXA"。/* smile */ 这道 AI 的题应该也不难,以后再说。
抛出异常的爱
2007-08-09
你没读懂。
这个题目是说怎么样才能用电脑猜出预设数字。
是个人工智能的题。
PS:50行与5行的区别不是很大。。。。。我认为
这个题目是说怎么样才能用电脑猜出预设数字。
是个人工智能的题。
PS:50行与5行的区别不是很大。。。。。我认为
Lich_Ray
2007-08-03
崩溃,这么长
。花 5 分钟用 Haskell 写了一个:
在互交解释器里执行
game = startGame [5,1,0,3]
即可开始一个新游戏 game,参数是你猜的数列,返回一个元组(A, B)。
Main> game [0,1,2,3]
(2,1) :: (Integer,Integer)
Main> game [4,5,6,7]
(0,1) :: (Integer,Integer)
Main> game [0,1,3,5]
(1,3) :: (Integer,Integer)
Main> game [1,3,5,0]
(0,4) :: (Integer,Integer)
Main> game [5,1,3,0]
(2,2) :: (Integer,Integer)
Main> game [5,1,0,3]
(4,0) :: (Integer,Integer)
Main>
博主应该庆幸我没有就此发篇博客叫做《五行与五十行的区别》
startGame ns = ans (0, 0) ns where ans r _ [] = r ans (a, b) (m:ms) (x:xs) | m == x = ans (a + 1, b) ms xs | elem x ns = ans (a, b + 1) ms xs | True = ans (a, b) ms xs
在互交解释器里执行
game = startGame [5,1,0,3]
即可开始一个新游戏 game,参数是你猜的数列,返回一个元组(A, B)。
引用
Main> game [0,1,2,3]
(2,1) :: (Integer,Integer)
Main> game [4,5,6,7]
(0,1) :: (Integer,Integer)
Main> game [0,1,3,5]
(1,3) :: (Integer,Integer)
Main> game [1,3,5,0]
(0,4) :: (Integer,Integer)
Main> game [5,1,3,0]
(2,2) :: (Integer,Integer)
Main> game [5,1,0,3]
(4,0) :: (Integer,Integer)
Main>
博主应该庆幸我没有就此发篇博客叫做《五行与五十行的区别》
发表评论
- 浏览: 216091 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
我的相册
长椅
共 39 张
共 39 张
最近加入圈子
链接
最新评论
-
到底要招什么样子的人?
那到底要什么样的人啊?你的重点呢?你想表达什么?
-- by xiaoyi829 -
到底要招什么样子的人?
努力吧!什么都是从不懂到懂,懂到精通!
-- by ada1230 -
DBA数据库字典
懒人。。。半仙。。。
-- by YuLimin -
天狗食日
看了。。。英雄(美剧)。。。。 之后就非常想要见识一下日食了 谢谢
-- by 抛出异常的爱 -
天狗食日
按照月亮运行规律来讲,一个月就会出现一次日食,并且今年出现日食时间和明年差不多, ...
-- by ddd






评论排行榜