The Next Number-Google Code Jam 2009 Round 1B B題

又是一道水題。 

仔細觀察數據規律就可以得到結果。

對於數據:

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;
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章