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