题目大意 给两个数m, s,求出位数等于m 且个位数字之和等于s的最小数和最大数。
解题思路 详细见代码
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { int x, y; cin >> x >> y; if (x == 1 && y == 0) { cout << 0 << " " << 0 << endl; return 0; } else if (y < 1 ||x * 9 < y) //y是和,如果所有的位数*9加起来的和还不等于y那完了,不符合 { cout << -1 << " " << -1 << endl; return 0; } int a[105]; int b[105]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int ans=y; for(int i=0;i<x;i++) { if(ans>9) { a[i]=9; b[i]=a[i]; ans-=9; } else//小于9的话直接让第一位等于那个数然后补零 { a[i]=ans; b[i]=a[i]; break; } } if(a[x-1]==0)//如果最大数的最后一位等于0 ,最小数的第一位就等于1 { b[x-1]=1; for(int i=x-2;i>=0;i--)//然后从倒数第二位再找 { if(a[i]!=0) { b[i]--; //因为之前给最小数加了个1,所以现在减掉 break; } } } for(int i=x-1;i>=0;i--) { cout << b[i]; } cout << " "; for(int i=0;i<x;i++) { cout << a[i]; } cout <<endl; return 0; }