在网上,有听过这么一道题,“两个人数数,每个人一次可以数一个数,可以数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,
所以,在下发现一个道理:程序=算法+数据结构,其实算法就是一种规则,如何发现规则来获取想要的结果就是一种算法的过程;而数据结构,相当于一种逻辑的组合,如何展现,如何组织,就是数据结构所关注的地方。
研究了一会儿,发现其中的规则挺简单,这道题可以引申为“两个人数数,最少数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,
所以,在下发现一个道理:程序=算法+数据结构,其实算法就是一种规则,如何发现规则来获取想要的结果就是一种算法的过程;而数据结构,相当于一种逻辑的组合,如何展现,如何组织,就是数据结构所关注的地方。