蓝桥杯练习题-穷举模拟

前言

本文主要是【穷举模拟】——蓝桥杯练习题-穷举模拟的文章,如果有什么需要改进的地方还请大佬指出⛺️

作者简介:大家好,我是听风与他
☁️博客首页:CSDN主页听风与他
每日一句:狠狠沉淀,顶峰相见

目录

    • 前言
    • 1.找出凶手
    • 2.分发糖果
    • 文章末尾

1.找出凶手

  • 题目描述:已知A、B、C、D中有一个凶手,对他们审讯,已知三个人说真话,一个人说假话。谁是凶手

  • A说不是我

  • B说是C

  • C说是D

  • D说C在胡说

请你找出凶手

package 穷举模拟;

public class Killer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int count = 0;//统计有几个人说的是真话
		for(int killer='A';killer<='D';killer++) {
			count = 0;
			if(killer!='A') count++;
			if(killer=='C') count++;
			if(killer=='D') count++;
			if(killer!='D') count++;
			if (count==3) {
				System.out.println((char)killer);
			}
		}
	}

}

2.分发糖果

  • 题目描述:

    • 每个小孩若干个糖果,且不相等
    • 每个小孩将自己糖果一半给右边小孩,最后一个小孩分给第一个小孩
    • 每次结束如果有人是奇数个糖果,补给一个
    • 所有小孩都相等,游戏结束

    求需要多少次分配,才能使游戏结束

package 穷举模拟;

import java.util.Arrays;

public class test1 {
/*
分发糖果
每个小孩若干个,不相等
每个小孩将自己糖果一半给右边小孩
如果有人奇数,补给一个
所有小孩都相等,游戏结束
 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[] = {10,2,8,22,16,4,10,6,14,20};
		int count=0;
		while(isGameOver(a)==false) {
			count++;
			fenpei(a);//先分配
			System.out.println(Arrays.toString(a));
			supply(a);//后补给
		}
		System.out.println(count+1);
		
	}
	public static void fenpei(int a[]) {
		int n = a.length;
		int half = a[n-1]/2;
		a[n-1]/=2;
		for(int i=n-1;i>=1;i--) {
			a[i]=a[i]+a[i-1]/2;//右边的等于左边的给自己一半
			a[i-1]=a[i-1]/2;//左边的人只剩下一半
		}
		a[0]=a[0]+half;
	}
	public static void supply(int a[]) {
		for(int i=0;i<a.length;i++) {
			if(a[i]%2==1) {
				a[i]++;//奇数补给一个
			}
		}
	}
	
	public static boolean isGameOver(int a[]) {
		for(int i=1;i<a.length;i++) {
			if(a[i]!=a[0]) {
				return false;
			}
		}
		return true;
	}

}

写法二:

		int a[] = {10,2,8,22,16,4,10,6,14,20};
		int n = a.length;
		int count = 0;
		while(true) {
			boolean flag = true;
			int half = a[n-1]/2;
			a[n-1]/=2;
			for(int i=n-1;i>=1;i--) {
				a[i]+=a[i-1]/2;
				a[i-1]/=2;
			}
			a[0]+=half;
			System.out.println(Arrays.toString(a));
			for(int i=0;i<n;i++) {
				if(a[i]%2==1)	a[i]++;
			}
			for(int i=1;i<n;i++) {
				if(a[i]!=a[0]) flag=false;
			}
			count=count+1;
			if (flag) {
				System.out.println("count:"+count+1);
				break;
			}
		}

文章末尾

在这里插入图片描述

你可能感兴趣的:(蓝桥杯,java,穷举模拟)