关于一个数数的游戏规则探讨

在网上,有听过这么一道题,“两个人数数,每个人一次可以数一个数,可以数2个数,最多可以数3个数,谁先数到25算输”。
研究了一会儿,发现其中的规则挺简单,这道题可以引申为“两个人数数,最少数min个数,最大数max个数,数到num这个数则当输。用Java程序实现就是:
public class Spillikin {
private int min ;//最少需要叫的数
private int max ;//最大需要叫的数
private int num ;//先叫到该数则为输

public Spillikin(int min,int max,int num){
this.min = min;
this.max = max;
this.num = num;
}

/**
* 方法声明为private,对外不显示
* 用于输出赛点列表
* @return
*/
private List<Integer> winPoints(){
List<Integer> result = new ArrayList<Integer>();
int top = num-1;//最终需要拿到的赛点
int space = min+max;//赛点间隔
for(;top>=0;top=(top-space)){
result.add(top);
}
return result;
}
/**
* 显示赛点
*/
public void getWinPoints(){
List<Integer> points = winPoints();
System.out.println("最少叫"+this.min+"个数,最大叫"
+this.max+"个数,先叫到"+this.num+"这个数的人则输。");
System.out.println("在此规则下,必须拿到以下这些点才能够确定最终成为赢家:");
for(Integer point:points){
System.out.print(point+",");
}
}
/**
* 测试主方法
* @param args
*/
public static void main(String[] args) {
Spillikin s = new Spillikin(1, 3, 25);
s.getWinPoints();
}
}

输出结果就是:

最少叫1个数,最大叫3个数,先叫到25这个数的人则输。
在此规则下,必须拿到以下这些点才能够确定最终成为赢家:
24,20,16,12,8,4,0,

所以,在下发现一个道理:程序=算法+数据结构,其实算法就是一种规则,如何发现规则来获取想要的结果就是一种算法的过程;而数据结构,相当于一种逻辑的组合,如何展现,如何组织,就是数据结构所关注的地方。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值