首页 > 试题广场 >

(选做)中国古代民间有这样一个游戏:两个人从1开始轮流报数,

[问答题]

(选做)中国古代民间有这样一个游戏:两个人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁为胜方。若要改成游戏者与计算机做这个游戏,则首先需要决定谁先报数,可以通过生成一个随机整数来决定计算机和游戏者谁先报数。计算机报数的原则为:若剩下数的个数除以3,余数为1,则报1个数,若剩下数的个数除以3,余数为2,则报2个数,否则随机报1个或2个数。游戏者通过键盘输入自己报的数,所报的数必须符合游戏的规则。如果计算机和游戏者都未报到30,则可以接着报数。先报到30者即为胜方。请编程实现这个游戏,看一看游戏者和计算机谁能获胜。


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class BaoShu {
    public static void Calculate(){
        if (list.isEmpty()){
            list.add(1);
            System.out.println(1);
            return;
        }

        if ((30 - list.size()) % 3 ==1){
            int tmp = list.get(list.size()-1)+1;
            list.add(tmp);
            System.out.println(tmp);
        } else if((30 - list.size()) % 3 ==2){
            int one = list.get(list.size()-1)+1;
            list.add(one);
            System.out.println(one);
            if (list.size() < 30){
                list.add(one+1);
                System.out.println(one+1);
            }
        } else {
            if (Math.random()>0.5){
                int one = list.get(list.size()-1)+1;
                list.add(one);
                System.out.println(one);
                if (list.size() < 30){
                    list.add(one+1);
                    System.out.println(one+1);
                }
                return;
            }

            list.add(list.get(list.size()-1)+1);
            System.out.println(list.get(list.size()-1)+1);
        }

    }
    static int size = 30;
    static List<Integer> list = new ArrayList<>(30);
    public static void main(String[] args) {
        double random = Math.random();
        Scanner scan = new Scanner(System.in);
        if (random > 0.5){
            System.out.println("--------您先输入-----------");
        } else {
            Calculate();
            System.out.println("--------您继续输入-----------");
        }
        while (scan.hasNext()){
            String num[] = scan.nextLine().split(" ");
            for (int i=0;i<num.length;i++){
                list.add(Integer.parseInt(num[i]));
            }
            if (list.size()==30){
                System.out.println("--------你获得胜利-----------");
            }
            //计算机输入
            Calculate();
            if (list.size()==30){
                System.out.println("--------电脑获得胜利-----------");
            }
        }

    }
}

编辑于 2020-03-24 14:48:01 回复(0)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int Fun(int n)
{
    if(n==1||n==2)
        return n;
    else
    {
        return rand()%2+1;
    }
}

int main()
{
    int i,j,k,n=0,s,t=1;
    //设置随机数种子,防止生成伪随机数(所有随机数一致) 
    srand((int)time(NULL));
    s=rand();
    printf("**********Let's Play the Game!**********\n");
    while(t)
    {
        s=s%2;
        if(s==0)
        {
            printf("Please input the num(1 or 2):");
            scanf("%d",&i);
            printf("Player:");
            for(j=0;j<i;j++)
            {
                n++;
                printf(" %d",n);
                if(n==30)
                {
                    printf("\nPlayer Win!");
                    t=0;
                    break;
                }
            }
            if(t==0)
                break;
            printf("\n");
            s++;
        }
        else
        {
            k=(30-n)%3;
            i=Fun(k);
            printf("Computer:");
            for(j=0;j<i;j++)
            {
                n++;
                printf(" %d",n);
                if(n==30)
                {
                    printf("\nComputer Win!");
                    t=0;
                    break;
                }
            }
            if(t==0)
                break;
            printf("\n");
            s++;
        }
    }
    return 0;
}
发表于 2019-09-13 00:08:16 回复(0)