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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值