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;

}

原文地址:https://www.cnblogs.com/Uiney117/p/14373281.html