2021-2-5蓝桥杯java-算法训练

本文探讨了猴子吃包子的有趣问题,涉及浮点数计算技巧,如整除和保留小数位数的方法,同时展示了两个Java程序实例:一个是精确控制输出格式的包子制作过程,另一个是实现字符串进位的Yaroslav算法优化。还介绍了如何通过不同函数提升算法性能,如线性、指数和斐波那契,以提升得分。
摘要由CSDN通过智能技术生成

一、猴子吃包子

“/”是整除,只能得到小数点前面的位置,为了得到小数在前面乘上1.0
当要保留的位数是输入的时,"%."+wei+“f”

import java.util.Scanner;
public class Baozi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s=new Scanner(System.in);
		int x=s.nextInt();
		int y=s.nextInt();
		int z=s.nextInt();
		long x1=s.nextLong();
		long y1=s.nextLong();
		long z1=s.nextLong();
		int wei=s.nextInt();
		double x2=1.0*x1/x;
		double y2=1.0*y1/y;
		double z2=1.0*z1/z;
		double sum=x2+y2+z2;
		System.out.printf("%."+wei+"f", sum);
		
	}

}

二、Yaroslav and Algorithm

char[] toCharArray() 将此字符串转换为一个新的字符数组。

这道题貌似就是实现十进制的加一,但没那么简单…
这个答案只有75分,无能为力了,一直运行超时…

import java.util.Scanner;

public class Yaroslav{

	public static void main(String[] args)
	{
		
			Scanner s=new Scanner(System.in);
		    int n=s.nextInt();
		    s.nextLine();    //这一句好像必须加上,不然是错的
		    while (n!=0)
		    {
		    	String src = s.nextLine();    //必须以字符串的形式输入
				char[] num = src.toCharArray();
				int flag = 0;
				for(int i=num.length-1; i>=0; i--)
				{
					if(num[i]=='9')
						num[i] = '0';
					else
					{
						num[i] += 1;
						flag = 1;
						break;
					}
				}
				String out = new String(num);    //字符数组转化为字符串
				if(flag != 1)
					out = "1" + out;
				System.out.println(src+"<>"+out);
			
		        n--;
		    }
		    
		}

}

三、RP大冒险

输入格式:一个数N表示测点编号。
输出格式:一个0~9的数。
样例输出:当且仅当输出仅有一个数X且X为0~9的数时你的得分不为零,此时你的得分为系统根据你的输出而计算出的你本次的RP。
究竟使用怎样的函数才能获得较高的RP呢?指数函数?幂函数?斐波那契数?圆周曲线的导数函数?
不懂啥意思…

1.static double random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
2.static double pow(double a, double b) 返回第一个参数的第二个参数次幂的值

线性函数,只有80分…

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		if(n > 10)
			n %= 10;
		System.out.println((int)(n*Math.random()));    //线性函数
	}
}

指数函数,102分,但仍显示有错误…

System.out.println((int)(Math.pow(n,Math.random())));    //改变输出语句
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值