zoukankan      html  css  js  c++  java
  • UVA 993 Product of digits

    UVA_993

    首先我们考虑,什么情况下会是-1?显然是当x不能分解成10以内素数乘积的时候,那么我们直接把x分解素数然后依次输出就可以了吗?也不行。

    至于为什么不行,我们不妨想一下怎么保证最后的数最小。首先,要数最小,肯定是先输出小的数字再输出大的,其次,我们也要保证数字的个数尽可能少,而且我们要优先去保证这一点。

    想到这里,我们不妨看一下10以内的数:23456789,其中8可以兼并32,于是我们先要看x包含几个8,其次,469都能兼并两个数,而且他们最大能兼并的数字之和是一定的,不会因兼并策略的改变而改变,但是为了保证小的数字更多,我们便要先考虑4,再考虑6,最后考虑9。剩下的2357再依次看一下就可以了。

    #include<stdio.h>
    int a[10];
    int judge(int x)
    {
    int i;
    memset(a,0,sizeof(a));
    while(x%8==0)
    {
    a[8]++;
    x/=8;
    }
    while(x%4==0)
    {
    a[4]++;
    x/=4;
    }
    while(x%6==0)
    {
    a[6]++;
    x/=6;
    }
    while(x%9==0)
    {
    a[9]++;
    x/=9;
    }
    for(i=2;i<8;i++)
    {
    while(x%i==0)
    {
    a[i]++;
    x/=i;
    }
    }
    if(x!=1)
    return 0;
    else
    return 1;
    }
    int main()
    {
    int i,j,k,Q,t;
    scanf("%d",&t);
    while(t--)
    {
    scanf("%d",&Q);
    if(Q==0)
    printf("0\n");
    else if(Q==1)
    printf("1\n");
    else if(judge(Q))
    {
    for(i=2;i<10;i++)
    while(a[i])
    {
    printf("%d",i);
    a[i]--;
    }
    printf("\n");
    }
    else
    printf("-1\n");
    }
    return 0;
    }


  • 相关阅读:
    HDU 4512 吉哥系列故事——完美队形I (LCIS)
    HDU 4506 小明系列故事——师兄帮帮忙
    SDUT Greatest Number
    HDU 4545 魔法串
    HDU 4546 比赛难度 (优先队列 * * )
    Android布局学习
    K9mail编译
    没有小的项目
    dxDBTreeView自动删除数据问题
    SQL Server查看表空间占用情况
  • 原文地址:https://www.cnblogs.com/staginner/p/2193004.html
Copyright © 2011-2022 走看看