公牛和母牛

通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

比如出题的人出题0426,猜的人说0462,此时就是2A2B


1.出数字(由电脑产生4个0-9随机数,且不重复)

        int[] intNumber=new int[4];//写出一个数组,用于表示随机的四位数
        for (int i = 0; i < intNumber.length; i++) {//i是下标
            int suijiNum=(int)(Math.random()*10);
            intNumber[i]=suijiNum;
            for (int j = 0; j < i; j++) {
                if (intNumber[j]==intNumber[i]){//此处用于避免数字重复
                    i--;
                    break;
                }
            }
        }
        for (int i = 0; i < intNumber.length; i++) {
            System.out.print(intNumber[i]+"");
        }
        System.out.println();

2.猜数字(用户输入)

1.只能输入一个数字字符串
2.字符串中的字符不能重复
3.只能给4个字符(如果字符个数不等于4个,需要请用户重新输入)
PS:如果用户没有输入正确的话,不会进入比较环节

        char zero=48;
        char nine=57;
        Scanner input=new Scanner(System.in);
        System.out.println("请输入4位数");
all:for (;;){
        all:for (;;){
            String str=input.next();
            char[] chars=str.toCharArray();
            for (int i = 0; i < chars.length; i++) {//i下标
                if (chars.length!=4){//超过4个字符
                    System.out.println("请重新输入");
                    continue all;
                }
                if (chars[i]>57||chars[i]<48){//不是0-9的范围
                    System.out.println("请重新输入");
                    continue all;
                }
                for (int j = 0; j < chars.length; j++) {
                    if ((i!=j)&&chars[i]==chars[j]){
                        System.out.println("请重新输入");
                        continue all;
                    }
                }
            }
            int A=0;//a数字对位置对
            int B=0;//b数字对位置错
            for (int i = 0; i < chars.length; i++) {
                if ((chars[i]-48)==intNumber[i]){
                    A++;
                }
                for (int j = 0; j < intNumber.length; j++) {
                    if ((chars[j]-48)==intNumber[i]&&(i!=j)){
                        B++;
                    }
                }
            }
}

3.用户猜的数字 和 电脑 出的数字对比,给出结果几A几B

System.out.println(A+"A"+B+"B");
if (A==4){
System.out.print("答对!"+str);
break;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个问题可以使用贪心算法来解决。我们可以从左到右遍历奶牛,记录当前连续的奶牛数量,以及公牛母牛的数量差。如果当前奶牛无法加入当前宿舍,那么我们就需要新开一个宿舍。 具体来说,我们可以记录当前宿舍内的公牛母牛数量以及宿舍内的总奶牛数量,以及当前连续的奶牛数量和公牛母牛数量差。如果当前奶牛可以加入当前宿舍,那么我们就将它加入宿舍,并更新宿舍内的数量信息;否则,我们就需要新开一个宿舍,并将当前奶牛加入新宿舍。 具体的实现细节可以参考下面的代码: ```python def minimum_shelters(n, m, cows): shelters = 0 current_gender = None current_count = 0 current_diff = 0 for cow in cows: if current_gender is None: # 第一个奶牛,初始化宿舍 current_gender = cow current_count = 1 elif current_gender == cow or abs(current_diff + (1 if cow == 'F' else -1)) <= m: # 可以加入当前宿舍 current_gender = current_gender or cow current_count += 1 current_diff += 1 if cow == 'F' else -1 else: # 需要新开一个宿舍 shelters += 1 current_gender = cow current_count = 1 current_diff = 0 return shelters + (1 if current_count > 0 else 0) ``` 其中,参数 `n` 表示奶牛的数量,参数 `m` 表示公牛母牛数量差的上限,参数 `cows` 是一个长度为 `n` 的字符串,表示每只奶牛的性别,其中 `'F'` 表示母牛,`'M'` 表示公牛。函数返回至少需要准备的宿舍数量。 例如,对于样例输入 `7 2 FMFMMFF`,函数的返回值为 `3`,表示最少需要准备 3 个宿舍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值