蓝桥杯专题-真题版含答案-【古代赌局】【古堡算式】【微生物增殖】【密码发生器】

Unity3D特效百例 案例项目实战源码 Android-Unity实战问题汇总
游戏脚本-辅助自动化 Android控件全解手册 再战Android系列
Scratch编程案例 软考全系列 Unity3D学习专栏
蓝桥系列 ChatGPT和AIGC

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单

👉实践过程

😜古代赌局

俗话说:十赌九输。因为大多数赌局的背后都藏有阴谋。不过也不尽然,有些赌局背后藏有的是:"阳谋"。

有一种赌局是这样的:桌子上放六个匣子,编号是1至6。多位参与者(以下称玩家)可以把任意数量的钱押在某个编号的匣子上。

所有玩家都下注后,庄家同时掷出3个骰子(骰子上的数字都是1至6)。输赢规则如下:

  1. 若某一个骰子上的数字与玩家所押注的匣子号相同,则玩家拿回自己的押注,庄家按他押注的数目赔付(即1比1的赔率)。
  2. 若有两个骰子上的数字与玩家所押注的匣子号相同,则玩家拿回自己的押注,庄家按他押注的数目的2倍赔付(即1比2的赔率)。
  3. 若三个骰子上的数字都与玩家所押注的匣子号相同,则玩家拿回自己的押注,庄家按他押注的数目的6倍赔付(即1比6的赔率)。
  4. 若玩家所押注匣子号与某个骰子示数乘积等于另外两个骰子示数的乘积,则玩家拿回自己的押注,庄家也不赔付(流局)。
  5. 若以上规则有同时满足者,玩家可以选择对自己最有利的规则。规则执行后,则庄家收获所有匣子上剩余的押注。
    乍一看起来,好像规则对玩家有利,庄家吃亏。但经过大量实战,会发现局面很难说,于是怀疑是否庄家做了手脚,
    庄家则十分爽快地说:可以由玩家提供骰子,甚至也可以由玩家来投掷骰子。
    你的任务是:通过编程模拟该过程。模拟50万次,假定只有1个玩家,他每次的押注都是1元钱,其押注的匣子号是随机的。
    再假定庄家有足够的资金用于赔付。最后计算出庄家的盈率(庄家盈利金额/押注总金额)。
    【输入、输出格式要求】
    程序无输入,程序运行输出庄家的盈率,四舍五入保留到小数后3位。
    【注意】
    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
    请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的"解答.txt"中即可。
    相关的工程文件不要拷入。
    请不要使用package语句。
    源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
c 复制代码
package Question10_19;
importjava.util.Scanner;
publicclass Question14 {
	publicstaticvoid main(String[] args) {
		int a,b,c,d,sum = 0;
		for (int i = 0; i < 500000; i++) {
			a=(int) (Math.random()*6)+1;
			b=(int) (Math.random()*6)+1;
			c=(int) (Math.random()*6)+1;
			d=(int) (Math.random()*6)+1;
		//	System.out.println(a+"  "+b+"  "+c+"  "+d);
			if(a==b&&a==c&&a==d){
				sum-=6;
			}elseif((a==b&&a==c)||(a==c&&a==d)||(a==b&&a==d)){
				sum-=2;
			}elseif(a==b||a==c||a==d){
				sum-=1;
			}elseif ((a*b==c*d)||(a*c==b*d)||(a*d==b*c)) {
				sum-=0;
			}else {
				sum+=1;
			}
		}
		System.out.printf("%.3f",sum/500000f);
	}
}
程序输出:
0.021
c 复制代码
import java.math.BigDecimal;  
public class Demo04 {  
    static int sum = 0; // 庄家总钱数   
    public static void f(int m,int n,int a,int b,int c){  
        if(n==a&&n==b&&n==c){  
            sum -= 6*m;  
        }else if(n==a&&n==b||n==a&&n==c||n==b&&n==c){  
            sum -= 2*m;  
        }else if(n==a||n==b||n==c){  
            sum -= m;  
        }else if(!(n*a==b*c||n*b==a*c||n*c==a*b)){  
            sum += m;  
        }  
    }  
    public static void main(String[] args) throws Exception{  
        int m = 1;  // 押注都是1元钱   
        int n;      // 押注匣子号   
        int a;      // 第一个骰子   
        int b;      // 第二个骰子   
        int c;      // 第三个骰子   
        for(int i=0;i<500000;i++){  
            n = (int)(Math.random()*6+1);  
            a = (int)(Math.random()*6+1);  
            b = (int)(Math.random()*6+1);  
            c = (int)(Math.random()*6+1);  
            f(m,n,a,b,c);  
        }  
//      float f = (new BigDecimal(sum).divide(new BigDecimal(500000),   
//              3,BigDecimal.ROUND_HALF_UP)).floatValue();   
//      System.out.println(f);   
        double d = sum/500000f;  
        System.out.printf("%.3f\n",d);  
    }  
}  

运行结果:
0.025

结果2:
0.022  

结果3:
0.024
.....

😜古堡算式

福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:

ABCDE * ? = EDCBA

他对华生说:"ABCDE应该代表不同的数字,问号也代表某个数字!"

华生:"我猜也是!"

于是,两人沉默了好久,还是没有算出合适的结果来。

请你利用计算机的优势,找到破解的答案。

把 ABCDE 所代表的数字写出来。

c 复制代码
public class TDemo02_two {
	publicstaticvoid main(String[] args){
		for(int i=10000;i<100000;i++){
			int a = i/10000;
			int b = i%10000/1000;
			int c = i%10000%1000/100;
			int d = i%10000%1000%100/10;
			int e = i%10;
			if(a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e){
				continue;
			}
			int y = e*10000+d*1000+c*100+b*10+a;
			if(y%i==0){
				System.out.println(i+"*"+y/i+"="+y);
			}
		}
	}
}
运行结果:
21978*4=87912
c 复制代码
public class Demo02 {  
    // 检查是否是全111111...   
    public static boolean check(int[] b){  
        boolean flag = true;  
        for(int i=0;i<b.length;i++){  
            if(b[i]==0){  
                flag = false;  
                break;  
            }  
        }  
        return flag;  
    }  
    // 检查是否是一个五位数   
    public static boolean checkFive(int[] b){  
        boolean flag = false;  
        int count = 0;  
        for(int i=0;i<b.length;i++){  
            if(b[i]==1){  
                count++;  
            }  
        }  
        if(count==5) flag = true;  
        return flag;  
    }  
    // 得到一个五位数字   
    public static String values(int[] b){  
        StringBuffer sb = new StringBuffer();  
        for(int i=0;i<b.length;i++){  
            if(b[i]!=0){  
                sb.append(i);  
            }  
        }  
        return sb.toString();  
    }  
    // 反转 n   
    public static int reverse(int n){  
        StringBuffer sb = new StringBuffer();  
        sb.append(n);  
        sb.reverse();  
        return Integer.parseInt(sb.toString());  
    }  
    // 进位得到下一个数字   
    public static void modify(int[] b){  
        b[b.length-1]++;  
        for(int i=b.length-1;i>0;i--){  
            if(b[i]>1){  
                b[i] = 0;  
                b[i-1]++;  
            }  
        }  
    }  
    public static void calc(String s){  
        int n = Integer.parseInt(s);    // 得到一个五位数字   
        int r = reverse(n); // 反转 n   
        if(r%n==0)  // 得到结果 n * ? = r   
            System.out.println(n+"*"+(r/n)+"="+r);  
    }  
    public static void allSort(char[] c,int start,int end){  
        char temp = 0;  
        if(start==end){  
            String s = new String(c);  
            if((s.charAt(0)-'0')!=0){  
                calc(s);    // 计算结果   
            }  
        }else{  
            for(int i=start;i<=end;i++){  
                temp = c[start];  
                c[start] = c[i];  
                c[i] = temp;  
                allSort(c,start+1,end);  
                temp = c[start];  
                c[start] = c[i];  
                c[i] = temp;  
            }  
        }  
    }  
    public static void f(int[] b){  
        for(;;){  
            if(check(b)) break; // 检查是否是全111111...   
            modify(b);  // 进位,进行下一个数字的测试   
            if(!checkFive(b)) continue; // 检查是否是一个五位数字   
            String s =  values(b);      // 得到一个五位数字   
            char[] c = s.toCharArray();  
            allSort(c,0,c.length-1);    // 全排列其中一个五位数,并计算结果   
        }  
    }  
    public static void main(String[] args){  
        int[] b = new int[10];  
        f(b);  
    }  
}

运行结果:
21978*4=87912
c 复制代码
public class Demo02 {  
    // 检查是否是全111111...   
    public static boolean check(int[] b){  
        boolean flag = true;  
        for(int i=0;i<b.length;i++){  
            if(b[i]==0){  
                flag = false;  
                break;  
            }  
        }  
        return flag;  
    }  
    // 检查是否是一个五位数   
    public static boolean checkFive(int[] b){  
        boolean flag = false;  
        int count = 0;  
        for(int i=0;i<b.length;i++){  
            if(b[i]==1){  
                count++;  
            }  
        }  
        if(count==5) flag = true;  
        return flag;  
    }  
    // 得到一个五位数字   
    public static String values(int[] b){  
        StringBuffer sb = new StringBuffer();  
        for(int i=0;i<b.length;i++){  
            if(b[i]!=0){  
                sb.append(i);  
            }  
        }  
        return sb.toString();  
    }  
    // 反转 n   
    public static int reverse(int n){  
        StringBuffer sb = new StringBuffer();  
        sb.append(n);  
        sb.reverse();  
        return Integer.parseInt(sb.toString());  
    }  
    // 进位得到下一个数字   
    public static void modify(int[] b){  
        b[b.length-1]++;  
        for(int i=b.length-1;i>0;i--){  
            if(b[i]>1){  
                b[i] = 0;  
                b[i-1]++;  
            }  
        }  
    }  
    public static void calc(String s){  
        int n = Integer.parseInt(s);    // 得到一个五位数字   
        int r = reverse(n); // 反转 n   
        if(r%n==0)  // 得到结果 n * ? = r   
            System.out.println(n+"*"+(r/n)+"="+r);  
    }  
    public static void allSort(char[] c,int start,int end){  
        char temp = 0;  
        if(start==end){  
            String s = new String(c);  
            if((s.charAt(0)-'0')!=0){  
                calc(s);    // 计算结果   
            }  
        }else{  
            for(int i=start;i<=end;i++){  
                temp = c[start];  
                c[start] = c[i];  
                c[i] = temp;  
                allSort(c,start+1,end);  
                temp = c[start];  
                c[start] = c[i];  
                c[i] = temp;  
            }  
        }  
    }  
    public static void f(int[] b){  
        for(;;){  
            if(check(b)) break; // 检查是否是全111111...   
            modify(b);  // 进位,进行下一个数字的测试   
            if(!checkFive(b)) continue; // 检查是否是一个五位数字   
            String s =  values(b);      // 得到一个五位数字   
            char[] c = s.toCharArray();  
            allSort(c,0,c.length-1);    // 全排列其中一个五位数,并计算结果   
        }  
    }  
    public static void main(String[] args){  
        int[] b = new int[10];  
        f(b);  
    }  
}

运行结果:
21978*4=87912

😜微生物增殖

假设有两种微生物 X 和 Y

X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。

一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。

现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。

如果X=10,Y=90 呢?

本题的要求就是写出这两种初始条件下,60分钟后Y的数目。

题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!

c 复制代码
package Question20_29;
importjava.util.Scanner;
publicclass Question22MustRemember {
	publicstaticvoid calculate(int primaryNumX,int primaryNumY,int timesOfMinute) {
		int numX=primaryNumX,numY=primaryNumY;
		for (int i = 2; i <=timesOfMinute*2; i++) {
			if(numY<=0){
				numY=0;
				break;
			}
			if(i%2==0){
				numY-=primaryNumX;// 当为整数分钟时,最初数目的生物X将进食同等数目的生物Y
			}
			elseif(i%2==1){
				numY-=(numX-primaryNumX); //当为半数分钟的奇数倍时,由最初的生物X增值产生的生物X将进食同等数目的生物Y
			}
			if(i%6==0){
				numX*=2;   //三分钟的整数倍,生物X增值一倍
			}
			if(i%4==0){
				numY*=2; //两分钟的整数倍,生物Y增值一倍
			}
		}
		System.out.println(numY);
	}
	publicstaticvoid main(String[] args) {
		
		calculate(10, 89, 60);
		calculate(10, 90, 60);
//		Scanner scanner=new Scanner(System.in);
//		int numX=scanner.nextInt(),numY=scanner.nextInt();
//		System.out.println(numX+"  "+numY);
	}
}
运行结果:
-979369984
94371840
94371840
c 复制代码
public class Demo01 {  
    public static void microAdd(long x,long y,int m){  
        for(int i=1;i<=m;i++){  
            y -= x;     // 吃掉x个y   
            if(i%3==0) x *= 2;  // 每隔3分钟x分裂一次   
            if(i%2==0) y *= 2;  // 每隔2分钟y分裂一次   
        }  
        System.out.println(y);  
    }  
    public static void main(String[] args){  
        microAdd(10,89,60);  
        microAdd(10,90,60);  
    }  
}  


运行结果:
-979369984  
94371840
结果如果是负数应置为0!!

😜密码发生器

在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,

容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了...

这个程序的任务就是把一串拼音字母转换为6位数字(密码)。

我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。

变换的过程如下:

第一步. 把字符串6个一组折叠起来,比如wangximing则变为:

wangxi

ming

第二步. 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出:

228 202 220 206 120 105

第三步. 再把每个数字"缩位"处理:就是把每个位的数字相加,得出的数字如果不是一位数字,

就再缩位,直到变成一位数字为止。例如: 228 => 2+2+8=12 => 1+2=3

上面的数字缩位后变为:344836, 这就是程序最终的输出结果!

要求程序从标准输入接收数据,在标准输出上输出结果。

输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。

输出格式为:n行变换后的6位密码。

例如,输入:

5

zhangfeng

wangximing

jiujingfazi

woaibeijingtiananmen

haohaoxuexi

则输出:

772243

344836

297332

716652

875843

c 复制代码
package Question10_19;
import java.util.Scanner;
publicclass Question19 {
	publicstaticint simplify(int n) {
		String s;
		while (n>=10) {
			s=n+"";
			n=0;
			for (int i = 0; i < s.length(); i++) {
				n+=s.charAt(i)-'0';
			}
		}
		return n;
	}
	publicstaticvoid main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		String s;
		scanner.nextLine();
		while((n--)>0){
			int array[]=newint[6];
			s=scanner.nextLine();
			for (int i = 0; i < s.length(); i++) {
				array[i%6]+=(int)(s.charAt(i));
			}
			for (int i = 0; i < 6; i++) {
				System.out.print(simplify(array[i]));
			}
			System.out.println();
		}
		
//		System.out.println(simplify(123456789));
	}
}
运行结果:
输入整数n(<100)表示下边有多少输入行:
5
zhangfeng
wangximing
jiujingfazi
woaibeijingtiananmen
haohaoxuexi
772243
344836
297332
716652
875843

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步 ☁️,我观你气度不凡 ,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞 👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。

相关推荐
XiaoLeisj12 分钟前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Jasmine_llq31 分钟前
《 火星人 》
算法·青少年编程·c#
闻缺陷则喜何志丹42 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
Lenyiin1 小时前
01.02、判定是否互为字符重排
算法·leetcode
鸽鸽程序猿1 小时前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列
Jackey_Song_Odd1 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v1 小时前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组