题目链接: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();
}
}
}