第十二届蓝桥杯B组试题答案

Posted So istes immer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十二届蓝桥杯B组试题答案相关的知识,希望对你有一定的参考价值。

试题 G: 最少砝码

 

 

【评测用例规模与约定】
对于所有评测用例,1 ≤ N ≤ 1000000000。

思路 
当砝码为1的时候,可以称出任意小于等于1的正整数重量
当砝码为1,3的时候,可以称出任意小于等于4的正整数重量
当砝码为1,3,9的时候,可以称出任意小于等于13的正整数重量
当砝码为1,3,9,27的时候,可以称出任意小于等于40的正整数重量
当砝码为1,3,9,27,81的时候,可以称出任意小于等于121的正整数重量
砝码为x个的时候,最多可以称出任意小于等于3^0+3^1+3^2+……+3^(x-1)的正整数重量

import java.util.*;
public class Main 
	
	public static void main(String[] args) 
		Scanner sc = new Scanner(System.in);
		long n = sc.nextLong();
		long ans = 0;
		while(n>0) 
			n -= Math.pow(3, ans);
			ans++;
		
		System.out.println(ans);
	

试题H 杨辉三角形

【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ N ≤ 10;
对于所有评测用例,1 ≤ N ≤ 1000000000。

参考

import java.util.Scanner;

public class Main 
    static int n;
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        if (n == 1) 
            System.out.println(1);
            return;
        
        for (int k = 16; ; k -- ) 
            if (check(k)) break;
        
    
    private static boolean check(int k) 
        long l = k * 2, r = n;
        while (l < r) 
            long mid = l + r >> 1;
            if (C(mid, k) >= n) r = mid;
            else l = mid + 1;
        
        if (C(r, k) != n) return false;
        System.out.println(r * (r + 1) / 2 + k + 1);
        return true;
    
    //求组合数
    private static long C(long a, long b) 
        long res = 1;
        for (long i = a, j = 1; j <= b; i --, j ++ ) 
            res = res * i / j;
            if (res > n) return res;
        
        return res;
    

以上是关于第十二届蓝桥杯B组试题答案的主要内容,如果未能解决你的问题,请参考以下文章

2021年软件类第十二届蓝桥杯第二场省赛 python组 A-E题解

2021.5.9 第十二届蓝桥杯大赛软件赛省赛第二场大学B组(个人题解)

2021软件类第十二届蓝桥杯国赛真题 Python组 A-E题解

2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛)

第十二届蓝桥杯省赛C_C++ 大学 B 组第一场部分题解

2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解