计蒜客2019年蓝桥杯国赛B组模拟赛题题解

第一题

标题:标签
计蒜客2019年蓝桥杯国赛B组模拟赛题题解_第1张图片

代码

import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Main {
	public static void main(String[] args)
	{
		long sum=1;
		for(int i=2;i<=1325476;i++)
		{
			sum=sum*i;				
			while(sum%10==0) sum=sum/10;
			sum=sum%100000000;
		}
		System.out.println(sum);
	}
}

运行结果:
在这里插入图片描述
注意这里多保留了几位,最终结果为:137664

第二题

标题:101串

计蒜客2019年蓝桥杯国赛B组模拟赛题题解_第2张图片

代码

第三题

标题:游戏

计蒜客2019年蓝桥杯国赛B组模拟赛题题解_第3张图片

代码

import java.io.*;
import java.math.*;
import java.util.*;
/*
可以观察到C+D=A+B=定值(Constant),C永远小于Constant
第一轮:C=2*A=(2*A)%Constant
第二轮:C=(2*2*A)%Constant 
……
第K轮:C=(2^K*a)%Constant  D=Constant-C
A=min(C,D)
 */
public class Main {
	public static void main(String[] args)
	{
		BigInteger A=new BigInteger("482333897982347239");
		BigInteger B=new BigInteger("557432748293424892");
		BigInteger K=new BigInteger("1389472389742429877");
		BigInteger Constant=A.add(B);
		BigInteger C=BigInteger.valueOf(2).modPow(K, Constant).multiply(A).mod(Constant);
		System.out.println(C.min(Constant.subtract(C)));
	}
}

结果:383513242709218605

第四题

标题:公约数
计蒜客2019年蓝桥杯国赛B组模拟赛题题解_第4张图片

代码

import java.io.*;
import java.util.*;
 /*
 数组a和f分别存储输入数据和每个数出现的次数
 maxn记录该组数中的最大值
 从maxn开始找,从f数组中统计是maxn倍数的数出现的次数
 如果出现的次数大于k则最大公约数即为maxn,否则继续向下寻找
  */
public class Main {
	static int maxn=0,k;
	static int result=1;
	static int[] f;
	//判断是num的倍数的数出现的次数
	static boolean judge(int num)
	{
		int sum_count=0;
		for(int i=num;i<=maxn;i+=num)
		{
			sum_count+=f[i];
		}
		//如果出现次数大于k,则num就是最大公约数,返回true
		if(sum_count>=k) return true;
		return false;
	}
	public static void main(String[] args) throws IOException
	{
		BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
		String[] s=reader.readLine().split(" ");
		int n=Integer.parseInt(s[0]);
		k=Integer.parseInt(s[1]);
		String[] ss=reader.readLine().split(" ");
		int[] a=new int[n];//存储输入的数
		f=new int[1000001];//存储每个数出现的次数
		for(int i=0;i1;i--)
		{
			if(judge(i)&&f[i]!=0)
			{
				result=i;
				break;
			}
		}
		System.out.println(result);
		reader.close();
	}
}

第五题
计蒜客2019年蓝桥杯国赛B组模拟赛题题解_第5张图片计蒜客2019年蓝桥杯国赛B组模拟赛题题解_第6张图片
代码

import java.io.*;
import java.math.*;
import java.util.*;

public class Main {
	static int[] pre;
	public static void main(String[] args) throws IOException
	{
		BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
		String[] s=reader.readLine().split(" ");
		int N=Integer.parseInt(s[0]);
		int M=Integer.parseInt(s[1]);
		pre=new int[100001];
		//存放顶点
		for(int i=1;i<=N;i++) pre[i]=i;
		int result=1;
		int mod=1046513837;
		for(int i=0;i

你可能感兴趣的:(蓝桥杯)