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;
    }


  • 相关阅读:
    分段、分页&&内存碎片、外存碎片
    mysql中的事务处理
    算法的在线演示网站
    为什么要使用树以及使用什么树
    平衡多叉树--B-Tree(B树)
    MVCC--多版本并发控制机制
    mysql中的锁
    平衡二叉树--红黑树(RB-Tree)
    平衡二叉树--AVL树
    自平衡方式--旋转
  • 原文地址:https://www.cnblogs.com/staginner/p/2193004.html
Copyright © 2011-2022 走看看