HPU多校-D:zz’s math problem Ⅰ

题目链接:http://pipakaca.com/problem.php?cid=1037&pid=3

这道题就算是有一些难度了,大概思路是:

每一位数都不大于9,然后拆分后保证一个条件即可满足结果为最大:每个数都是质数

所以我的思路是:

1:先f(x)的每位数枚举一遍,分解成x1个1,x2个2....x9个9相乘

2:然后依次枚举能有多少个7的戒惩,多少个5的阶乘,3的阶乘,2的阶乘。

3:在枚举的时候,枚举7之前把9转化为2个3,8转化为3个2,枚举完7转化6,枚举完5转化4。

下面是我的代码,有些累赘:

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int t=sc.nextInt();
		while(t--!=0){
			int arr[]=new int[10];						//保存1-9每个数的个数
			int len=sc.nextInt();
			String s=sc.next();
			for(int i=0;i<s.length();i++){				
				for(int j=1;j+'0'<=s.charAt(i);j++){	//如果是n,那数组1-n都+1,因为是阶层
					arr[j]++;
				}
			}
			int num[]=new int[4];						//四个数组,分别储存枚举后7.5.3.2的个数
			arr[2]+=3*arr[8];							//大于7的数转化一下
			arr[3]+=arr[9]*2;							
			num[0]=arr[7];								//枚举后7的个数等于现在的
			for(int i=2;i<=7;i++)arr[i]-=arr[7];		//因为是阶层,所以小于7的都要-1
			arr[2]+=arr[6];								//然后转化6
			arr[3]+=arr[6];
			num[1]=arr[5];
			for(int i=2;i<=5;i++)arr[i]-=arr[5];		//枚举5
			arr[2]+=2*arr[4];							//转化4
			num[2]=arr[3];								
			for(int i=2;i<=3;i++)arr[i]-=arr[3];		//枚举3
			num[3]=arr[2];
			
			//最后打印
			for(int i=0;i<num[0];i++)System.out.print(7);
			for(int i=0;i<num[1];i++)System.out.print(5);
			for(int i=0;i<num[2];i++)System.out.print(3);
			for(int i=0;i<num[3];i++)System.out.print(2);
			System.out.println();
		}
	}  
}

猜你喜欢

转载自blog.csdn.net/King8611/article/details/81275733