题目
代码
我的解法
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
int main()
{
long long int m,s,i=0,j=0,max=0,min=0,a[100]={0},num,k=0;
scanf("%lld%lld",&m,&s);
j=m;
k=s;
if (m>=2&&s<=0||m<=0||m*9<s)
{
printf("-1 -1");
exit(0);
}
if (m==1&&s==0)
{
printf("0 0");
exit(0);
}
num=s>9?9:s;
while (j&&num>0&&k>=0)
{
a[j-1]=num;
if (k-num>9)
{
k-=num;
num=9;
}
else
{
k-=num;
num=k;
}
j--;
}
int temp=0;
if(a[0]==0)
{
printf("1");
i=1;
}
else i=0;
for (;i<m;i++)
{
if (a[i]>0&&a[i-1]==0)
printf("%lld",a[i]-1);
else
printf("%lld",a[i]);
}
putchar(' ');
for (i=0;i<m;i++)
{
printf("%lld",a[m-i-1]);
}
}
别人的解法(C++)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int m, s;
while (scanf("%d%d", &m, &s) != EOF)
{
if (m == 1 && s == 0)
printf("0 0\n");
else if (s == 0 || 9*m < s)
printf("-1 -1\n");
else
{
string s1, s2;
for (int i = 0; i < m; i++)
{
int x = min(9, s);
s -= x;
s2 += char(x + '0');
}
s1 = s2;
reverse(s1.begin(), s1.end());
bool flag = false;
for (int i = 0; i < m && !flag; i++)
{
if (s1[i] == '0')
{
for (int j = i+1; j < m && !flag; j++)
{
if (s1[j] != '0')
{
s1[j]--;
s1[i]++;
flag = true;
break;
}
}
}
}
cout << s1 << " " << s2 << endl;
}
}
return 0;
}
感受
1400分,基础题,思路清晰,注意特殊情况即可。
思路
有时间再写。