#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int m_max = 100 + 5;
int m, s, sum;
int digit[m_max];
int digit_max[m_max];
bool flag;
int main()
{
while(~scanf("%d %d", & m, & s))
{
if(m == 1 && s == 0)
{
printf("0 0\n");
continue;
}
memset(digit, 0, sizeof(digit));
digit[0] = 1;
sum = 1;
flag = false;
for(int i = 0; i < m; i ++)
{
while(digit[i] < 9)
{
if(sum < s)
{
digit[i] ++;
sum ++;
}
if(sum == s)
{
flag = true;
goto End;
}
if(sum > s)
goto End;
}
}
End:
if(flag)
{
for(int i = 0; i < m; i ++)
digit_max[i] = digit[i];
if(!digit[m - 1])
{
digit[m - 1] = 1;
for(int i = m - 2; i >= 0; i --)
{
if(digit[i])
{
digit[i] --;
break;
}
}
}
for(int i = m - 1; i >= 0; i --)
printf("%d", digit[i]);
printf(" ");
for(int i = 0; i < m; i ++)
printf("%d", digit_max[i]);
printf("\n");
}
else
printf("-1 -1\n");
}
return 0;
}
题目:
输入m, s。m代表数字的位数,s代表各个位上的数字要求和为s。求满足要求的最小值和最大值。没有输出-1 -1。
题解:
水题。本来想偷工减料点,结果越写越麻烦,BUG百出。也懒得从头改了。