又是一道水題。
仔細觀察數據規律就可以得到結果。
對於數據:
647654321: 其下一個數是6512344567
87650:下一個數爲500678
其實生成的規則相當簡單。 但是我的代碼相當醜陋。
// The Next Number.cpp: 主項目文件。
#include "stdafx.h"
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int main() {
freopen("../B-large-practice.in", "r", stdin);
freopen("output.txt", "w", stdout);
string s;
int t, i, j, m;
cin>>t;
for(int k = 0; k < t; k++){
cout<<"Case #"<<(k + 1)<<": ";
cin>>s;
int max = s[s.size() - 1];
for(i = s.size() - 2; i >= 0; i--) {
if(s[i] < max) break;
else max = s[i];
}
if(i == -1) {
//s[s.size() -1] == '0'
for(j = s.size() - 1; j >= 0; j--) if(s[j] != '0') break;
cout<<s[j];
cout<<s.substr(j + 1);
cout<<"0";
for(m = j - 1; m >= 0; m--)cout<<s[m];
}
else {
//Find the j that s[j] > s[i]
for(j = i + 1; j < s.size(); j++)
if(s[j] <= s[i]) break;
j--;
cout<<s.substr(0, i);
cout<<s[j];
for(int m = s.size() - 1; m > j; m--) cout<<s[m];
cout<<s[i];
for(int m = j -1; m > i; m--) cout<<s[m];
//Data:647654321
}
cout<<endl;
}
}