📑前言
本文主要是【穷举模拟】——蓝桥杯练习题-穷举模拟的文章,如果有什么需要改进的地方还请大佬指出⛺️
🎬作者简介:大家好,我是听风与他🥇
☁️博客首页: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 stubint 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 stubint 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;}}