蓝桥杯专题-真题版含答案-【手机尾号评分】【古代赌局】【益智玩具(汉诺塔)】【黄金连分数】

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

👉关于作者

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

CSDN-芝麻粒儿

👉实践过程

😜手机尾号评分

30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!给手机选个好听又好记的号码可能是许多人的心愿。
但号源有限,只能辅以有偿选号的方法了。
这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:

  1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。
  2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。
    注意:7777因为满足这条标准两次,所以这条规则给它加了6分。
  3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。
    注意:7777因为满足这条标准两次,所以这条标准给它加了2分。
  4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。
    尾号最终得分就是每条标准的加分总和!
    要求程序从标准输入接收数据,在标准输出上输出结果。
    输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。
    例如,输入:
    14
    3045
    ….
    ……
    6789
    8866
    则输出:
    0
    0
    ….

    8
    5
package Question1_9;
import java.util.Scanner;
import java.util.Stack;
import java.util.Vector;
public class Question5 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		scanner.nextLine();
		while ((n--)>0) {
			String telphone=scanner.nextLine();
			int sum=0;
			/*
			 * 情况一
			 */
			if(telphone.charAt(0)-telphone.charAt(1)==1){
				char ch=telphone.charAt(0);
				int index=0;
				while (index<4&&ch==telphone.charAt(index)) {
					ch--;
					index++;
				}
				if(index>=4){
					sum+=5;
				}
			}
			if (telphone.charAt(0)-telphone.charAt(1)==-1) {
				char ch=telphone.charAt(0);
				int index=0;
				while (index<4&&ch==telphone.charAt(index)) {
					ch++;
					index++;
				}
				if(index>=4){
					sum+=5;
				}
			}
			/*
			 * 情况二
			 */
			if (telphone.charAt(0)==telphone.charAt(1)&&telphone.charAt(1)==telphone.charAt(2)) {
				sum+=3;
			}
			if(telphone.charAt(1)==telphone.charAt(2)&&telphone.charAt(2)==telphone.charAt(3)){
				sum+=3;
			}
			
			/*
			 * 情况三
			 */
			if(telphone.charAt(0)==telphone.charAt(1)&&telphone.charAt(2)==telphone.charAt(3)){
				sum+=1;
			}
			if(telphone.charAt(0)==telphone.charAt(2)&&telphone.charAt(1)==telphone.charAt(3)){
				sum+=1;
			}
			/*
			 * 情况四
			 */
			for (int i = 0; i < 4; i++) {
				if(telphone.charAt(i)=='6'||telphone.charAt(i)=='8'||telphone.charAt(i)=='9'){
					sum+=1;
				}
			}
			System.out.println(sum);
		}
	}
}
运行结果:
14
3045
0211....
……
8
5

😜古代赌局

俗话说:十赌九输。因为大多数赌局的背后都藏有阴谋。不过也不尽然,有些赌局背后藏有的是:“阳谋”。
有一种赌局是这样的:桌子上放六个匣子,编号是1至6。多位参与者(以下称玩家)可以把任意数量的钱押在某个编号的匣子上。
所有玩家都下注后,庄家同时掷出3个骰子(骰子上的数字都是1至6)。输赢规则如下:

  1. 若某一个骰子上的数字与玩家所押注的匣子号相同,则玩家拿回自己的押注,庄家按他押注的数目赔付(即1比1的赔率)。
  2. 若有两个骰子上的数字与玩家所押注的匣子号相同,则玩家拿回自己的押注,庄家按他押注的数目的2倍赔付(即1比2的赔率)。
  3. 若三个骰子上的数字都与玩家所押注的匣子号相同,则玩家拿回自己的押注,庄家按他押注的数目的6倍赔付(即1比6的赔率)。
  4. 若玩家所押注匣子号与某个骰子示数乘积等于另外两个骰子示数的乘积,则玩家拿回自己的押注,庄家也不赔付(流局)。
  5. 若以上规则有同时满足者,玩家可以选择对自己最有利的规则。规则执行后,则庄家收获所有匣子上剩余的押注。
    乍一看起来,好像规则对玩家有利,庄家吃亏。但经过大量实战,会发现局面很难说,于是怀疑是否庄家做了手脚,
    庄家则十分爽快地说:可以由玩家提供骰子,甚至也可以由玩家来投掷骰子。
    你的任务是:通过编程模拟该过程。模拟50万次,假定只有1个玩家,他每次的押注都是1元钱,其押注的匣子号是随机的。
    再假定庄家有足够的资金用于赔付。最后计算出庄家的盈率(庄家盈利金额/押注总金额)。
    【输入、输出格式要求】
    程序无输入,程序运行输出庄家的盈率,四舍五入保留到小数后3位。
    【注意】
    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
    请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
    相关的工程文件不要拷入。
    请不要使用package语句。
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

😜益智玩具(汉诺塔)

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上(可以借助第三根柱子做缓冲)。
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
如图【1.jpg】是现代“山寨”版的该玩具。64个圆盘太多了,所以减为7个,
金刚石和黄金都以木头代替了…但道理是相同的。
据说完成大梵天的命令需要太多的移动次数,以至被认为完成之时就是世界末日!
你的任务是精确计算出到底需要移动多少次。
很明显,如果只有2个圆盘,需要移动3次。
圆盘数为3,则需要移动7次。
那么64个呢?

package Question40_49;
import java.math.BigInteger;
import java.util.Scanner;
public class Question42MustRemember {
	public static BigInteger count=BigInteger.valueOf(0);
	public static void move(int from,int to) {
	//	System.out.println(from+"--->"+to);
		count=count.add(BigInteger.valueOf(1));
	}
	public static void hanoi(int n,int from,int to,int assist) {
		if(n>0){
			hanoi(n-1, from, assist, to);
			move(from, to);
			hanoi(n-1, assist, to, from);
		}
		
	}
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
	//	int n=scanner.nextInt();
		for (int i = 1; i <= 100; i++) {
			long startTime = System.currentTimeMillis();	// 程序开始时间
			hanoi(i, 1, 2, 3);
			long endTime = System.currentTimeMillis();	// 程序结束时间
			System.out.println("n="+String.format("%4d", i)+"  时,耗时"+String.format("%f", (endTime-startTime)/1000f)+"秒,  移动了"+count+" 次  ");
			count=BigInteger.valueOf(0);
			
		}
	}
}

😜黄金连分数

黄金分割数0.61803… 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!
言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
比较简单的一种是用连分数:
1
黄金数 = ---------------------
1
1 + -----------------
1
1 + -------------
1
1 + ---------
1 + …
这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为:0.618
小数点后4位的值为:0.6180
小数点后5位的值为:0.61803
小数点后7位的值为:0.6180340
(注意尾部的0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。
注意:尾数的四舍五入!尾数是0也要保留!
显然答案是一个小数,其小数点后有100位数字,请通过浏览器直接提交该数字。

import java.math.BigInteger;
public class test5 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger one = BigInteger.ONE;
		BigInteger ten = BigInteger.TEN;
		BigInteger a = one;
		BigInteger b = one.add(one.add(one));
		BigInteger c = b;
		BigInteger sum = BigInteger.ONE;
		for(int i=0;i<300;i++){//需要精确到100位,所以循环次数要适当
			sum = a;
			for(int j=0;j<101;j++){//需要把小数点向右移动101位
			sum = ten.multiply(sum);
			}
			BigInteger res = sum.divide(c);
			c = a.add(b);
			a = b;
			b = c;
			if(res.toString().length()==101){//要判断到101位,需要四舍五入
				System.out.println(res);
				
			}
		}
	}
}

👉其他

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

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

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻粒儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值