程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜。(使用图形界面)
哥哥姐姐们,我是大二的学生,这是我们课程设计其中一个题目,觉得不知道怎么下手,谢谢给我一些参考

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【raymond304】截止到2008-06-30 09:57:21的历史汇总数据(不包括此帖):
    发帖数:0                  发帖分:0                  
    结贴数:0                  结贴分:0                  
    未结数:0                  未结分:0                  
    结贴率:-------------------结分率:-------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    这样,我来说说我的想法。
    如果当某方取走火柴之后,剩下的火柴数目是4的倍数的时候,这方一定可以通过合适的取火柴的方法获胜。简单说,当对手取a根时,你就取4-a根,就能够到达下一个4的倍数,从而一步一步靠近0点而获胜。
    所以,如果是按照最合理的方法来玩这个游戏:
    如果火柴数是4的整数倍,则先取者必败。
    否则,先取者如果能保证剩下的火柴数是4的整数倍,则必胜。
    根据这个原理,你可以设置计算机采用2种策略。
    1、如果计算机能够在它第一次取之后留下4的整数倍的火柴,那它就按照这个方法来取,以后只要根据人的取法再取4-a根就必胜。
    2、如果计算机不能在它第一次取之后留下4的整数倍的火柴,那它就在1-3根中随机选择,直到它能够满足第一条,或者直到火柴被取完为止。不知道这个说法你是否理解了。
      

  3.   

    师兄,其实我觉得蛮笨的,算法我能想到,但是变作程序语言我就搞不定了。
    光随机产生20-50之间的数我就已经头大了,我编的代码如下:
    import java.util.*; 
    public class RandomWithRangeTest { 
    public RandomWithRangeTest(){ 

    public static void main(String [] args){ 
    Random rdm=new Random(); 
    System.out.println("Range from 20 to 50"); 
    if(rdm.nextInt()%50>20){ 
    System.out.println(rdm.nextInt()%50); 

    else return;
    }

    运行出来,花样百出。有负数、正确的数、还有就是没答案
    请师兄帮忙指正错误,万分感谢
      

  4.   


    int a = (int)(Math.random() * 31) + 20;//20-50
    int b = (int)(Math.random() * 3) + 1;//1-3Math.random() 随机产生一个大于等于0小于1的double