基准时间限制:1 秒 空间限制:131072 KB
X是一个n位数的正整数 (x=a0a1...an−1)
现在定义 F(x)=∏i=0n−1(ai!) , 比如F(135)=1!*3!*5!=720.
我们给定一个n位数的整数X(至少有一位数大于1,X中可能有前导0),
然后我们去找一个正整数(s)符合以下条件:
1.这个数尽可能大,
2.这个数中不能含有数字0或1。
3.F(s)=F(x)
Input
每个测试数据输入共2行。 第一行给出一个n,表示x为中数字的个数。(1<=n<=15) 第二行给出n位数的正整数X(X中至少有一位数大于1)
Output
共一行,表示符合上述条件的最大值。
Input示例
4 1234
Output示例
33222
思路:找下合数的规律;
1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<math.h> 5 #include<stdlib.h> 6 #include<queue> 7 #include<iostream> 8 using namespace std; 9 char str[25]; 10 bool prime[25]; 11 int ans[25]; 12 int t[25]; 13 int ak[10000]; 14 int main(void) 15 { 16 int n; 17 int i,j;prime[0] = true; 18 for(i = 2; i < 20; i++) 19 { 20 if(!prime[i]) 21 { 22 for(j = i; (i*j) < 20; j++) 23 { 24 prime[i*j] = true; 25 } 26 } 27 }prime[1]=true; 28 scanf("%d",&n); 29 scanf("%s",str); 30 for(i = 0; i < n; i++) 31 { 32 t[i] = str[i]-‘0‘; 33 } 34 int uu = 0;//printf("%d\n",ak[0]); 35 for(i = 0; i < n; i++) 36 { 37 if(!prime[t[i]]) 38 { 39 ak[uu++] = t[i]; 40 } 41 else if(t[i] == 4) 42 { 43 ak[uu++] = 2; 44 ak[uu++] = 2; 45 ak[uu++] = 3; 46 } 47 else if(t[i] == 6) 48 { 49 ak[uu++] = 3; 50 ak[uu++] = 5; 51 } 52 else if(t[i] == 8) 53 { 54 ak[uu++] = 2; 55 ak[uu++] = 2; 56 ak[uu++] = 2; 57 ak[uu++] = 7; 58 } 59 else if(t[i] == 9) 60 { 61 ak[uu++] = 3; 62 ak[uu++] = 3; 63 ak[uu++] = 2; 64 ak[uu++] = 7; 65 } 66 }//printf("%d\n",ak[0]); 67 sort(ak,ak+uu); 68 for(i = uu-1; i >= 0; i--) 69 { 70 printf("%d",ak[i]); 71 } 72 printf("\n"); 73 return 0; 74 }
时间: 2024-11-16 01:13:38