本文共 1636 字,大约阅读时间需要 5 分钟。
#include#include #include 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百出。也懒得从头改了。
转载地址:http://yjtpi.baihongyu.com/