蓝桥杯练习题-穷举模拟

📑前言

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

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

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;
			}
		}

📑文章末尾

在这里插入图片描述

相关推荐

  1. 练习题

    2024-01-18 12:50:05       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-18 12:50:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-18 12:50:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-18 12:50:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-18 12:50:05       20 阅读

热门阅读

  1. C Primer Plus(第六版)11.13 编程练习 第12题

    2024-01-18 12:50:05       35 阅读
  2. 计算机网络、浏览器面试题

    2024-01-18 12:50:05       30 阅读
  3. 如何解决redis热点key问题

    2024-01-18 12:50:05       32 阅读
  4. Go自研微服务框架-日志处理

    2024-01-18 12:50:05       29 阅读
  5. Android设置夜间模式的主题样式

    2024-01-18 12:50:05       33 阅读
  6. .Net CSRF 跨站点请求伪造漏洞

    2024-01-18 12:50:05       33 阅读
  7. QT基础篇(9)QT5文件及磁盘处理

    2024-01-18 12:50:05       34 阅读