思路:
注意分类讨论,首先如果选出的两个数加起来小于10,那序列位数减少,值必然变小 ,但相对于这一位来说必然变大(如2+3=5)或者不变(如1+0=1),所以必须让这种情况尽量靠前。如果两个数加起来大于10,那相对于这两位来说必然变小(如2+8=10)或者不变(1+9=10),所以必须让这种情况尽量靠后。由于这两种情况的处理方法是对立的,所以分两种情况,存在加起来大于10的情况和不存在加起来大于10的情况分别讨论。
Code:
#include#include #include #include using namespace std; const int N = 1; void solve() { string s; cin>>s; int len=s.size(); for(int i=len-1;i;i--) { int now=(s[i]-'0')+(s[i-1]-'0'); if(now>=10) { s[i]=now%10+'0'; s[i-1]=now/10+'0'; cout< >_; while(_--) solve(); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)