zoukankan      html  css  js  c++  java
  • C. Given Length and Sum of Digits...(思维题)

    题意:给出两个数,m和s,m表示数字的位数(长度),s表示各个位上数字之和。输出符合条件的最大数和最小数。如果找不到符合条件的数就输出“-1 -1”。

    题解:先考虑不符合条件的数,每个位上最大能放“9”,如果和大于位数x9,就找不到对应的值啦。当和大于0,但是位数等于0时,也不能找到对应的值啊。输出最大值的话,把最大的值放在高位上,不足就补0就好啦。输出最小值,就把大的数排在最低位,在高位补0就行了。但是最高位不能为0,就去找不为0的最高位,分一个1给最高位。

    ACcode:

    int main()

    {

    int a[110], b[110];

    int n, m;

    cin >> n >> m;

    if (n == 1 && m == 0)

    cout << 0 << " " << 0;

    else if (n * 9 < m || m < 1)

    cout << -1 << " " << -1;

    else

    {

    int s =m;

    for (int i = n; i >= 1; i--)

    {

    a[i] = min(s, 9);

    s = s - min(s, 9);

    }

    if (a[1] == 0)

    {

    for(int i=1;i<=n;i++)

    {

    if (a[i] != 0)

    {

    a[i] = a[i] - 1;

    a[1] = 1;

    break;

    }

    }

    }

    s = m;

    for (int i = 1; i <= n; i++)

    {

    b[i] = min(s, 9);

    s = s - min(s, 9);

    }

    for (int i = 1; i <= n; i++)

    cout << a[i];

    cout << " ";

    for (int i = 1; i <= n; i++)

    cout << b[i];

    }

    return 0;

    }

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/Uiney117/p/14373281.html
Copyright © 2011-2022 走看看