搜索水题

T - dfs-easy
Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

Description

Download as PDF


  Product of digits 

For a given non-negative integer number N , find the minimal natural Q such that the product of all digits of Q is equal N .

Input

The first line of input contains one positive integer number, which is the number of data sets. Each subsequent line contains one data set which consists of one non-negative integer number N (0$ \le$N$ \le$109) .

Output

For each data set, write one line containing the corresponding natural number Q or `-1' if Q does not exist.

Sample Input

3 
1 
10 
123456789

Sample Output

1 
25 
-1


题意挺难理解滴:给你一个数n,让你找出一个最小的数,满足该数的每一位的乘积为n.

思路:每位最多有1,2,3,4,5,6,7,8,9.这9中可能。数最大为pow(10,9)。所以不用担心,搜索会超时。枚举每一位,从高位到地位,利用贪心的思想:】

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string.h>
using namespace std;
int ans[20];
int num[10]= {2,3,4,5,6,7,8,9};
int flag;
int step;
void DFS(int tem,int an)
{
    if(tem==1)
    {
        flag=2;
        return ;
    }
    if(an==0&&tem%2!=0&&tem!=1)
    {
        flag=1;
        return;
    }
    for(int i=an; i>=0; i--)
    {
        if(tem%num[i]==0)
        {
            ans[step++]=num[i];
            DFS(tem/num[i],i);
            if(flag==1||flag==2)
                return ;
        }
        if(i==0&&tem%2!=0&&tem!=1)
        {
            flag=1;
            return;
        }
    }
}
int main()
{
    int T;
    int t;
    scanf("%d",&T);
    while(T--)
    {
        step=flag=0;
        memset(ans,0,sizeof(ans));
        scanf("%d",&t);
        if(t==1)
        {
            printf("1\n");
            continue;
        }
        DFS(t,7);
        if(flag==1)
            printf("-1");
        else
            for(int i=step-1; i>=0; i--)
                printf("%d",ans[i]);
        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值