C. Drazil and Factorial
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Drazil is playing a math game with Varda.
Let’s definefor positive integerxas a product of factorials of its digits. For example,.
First, they choose a decimal numberaconsisting ofndigits that contains at least one digit larger than1. This number may possibly start with leading zeroes. Then they should find maximum positive numberxsatisfying following two conditions:
1.xdoesn’t contain neither digit0nor digit1.
2..
Help friends find such number.
Input
The first line contains an integern(1≤n≤15) — the number of digits ina.
The second line containsndigits ofa. There is at least one digit inathat is larger than1. Numberamay possibly contain leading zeroes.
Output
Output a maximum possible integer satisfying the conditions above. There should be no zeroes and ones in this number decimal representation.
Sample test(s)
input
41234
output
33222
input
3555
output
555
Note
In the first case,
思路:就是尽可能的将数字化简拆分,0,1舍弃,2,3,5,,7不动,4拆分成3,2和2,6拆分成5和3,8拆分成7,2,2,和2,9拆分成7,3,3和2,然后从大到小输出即可
比赛时写完才发现自己有个小bug,哎,这时已经锁了(`)
AC代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main() {int n, num[11];char a[20];while(scanf("%d %s", &n, a) != EOF) {memset(num, 0, sizeof(num));for(int i = 0; i < n; i++) {if(a[i] != '0' || a[i] != '1') {if(a[i] == '6') {num[5]++;num[3]++;}else if(a[i] == '8') {num[2] += 3;num[7] ++;}else if(a[i] == '4') {num[2] += 2;num[3]++;}else if(a[i] == '9') {num[7]++;num[2]++;num[3]+=2;}else num[a[i] – '0']++;}}for(int i = 9; i >= 2; i–) {while(num[i]){printf("%d", i);num[i]–;}}printf("\n");}return 0;}
人生好如足球赛,看自家总是无奈,对人家总是优待,