POJ-1350

#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
using namespace std;

int calcMax(vector<int> v, int validNum){
	//0 1 2 3
	if(validNum==0){
		return 0;
	}else if(validNum==1){
		return v[3];
	}else if(validNum==2){
		return v[3]*10+v[2];
	}else if(validNum==3){
		return v[3]*100+v[2]*10+v[1];
	}else{
		return v[3]*1000+v[2]*100+v[1]*10+v[0];
	}
}

pair<int,int> maxMin(int num){
	vector<int> v(4);
	int validNum=4;
	v[0]=num/1000;
	v[1]=(num-v[0]*1000)/100;
	v[2]=(num-v[0]*1000-v[1]*100)/10;
	v[3]=num-v[0]*1000-v[1]*100-v[2]*10;

	if(v[0]==0){
		validNum--;
	}

	if(v[0]==0 && v[1]==0){
		validNum--;
	}

	if(v[0]==0 && v[1]==0 && v[2]==0){
		validNum--;
	}

	if(v[0]==0 && v[1]==0 && v[2]==0 && v[3]==0){
		validNum--;
	}

	sort(v.begin(),v.end());

	return pair<int,int>(calcMax(v,validNum),
						 v[0]*1000+v[1]*100+v[2]*10+v[3]);

}

int process(pair<int,int> p){
	int count=1;
	int diff=p.first-p.second;
	cout<<p.first<<"-"<<p.second<<"="<<diff<<endl;

	if( diff==6174 || diff==0){
		return count;
	}else{
		//count++;
		return count+=process(maxMin(diff));
	}
}

int main(int argc, char *argv[]){
	int num;
	while(cin>>num,num!=-1){
		cout<<"N="<<num<<":"<<endl;
		pair<int,int> p=maxMin(num);

		if(num<1000||num>9999||p.first==p.second){
			cout<<"No!!"<<endl;
		}else{
			cout<<"Ok!! "<<process(p)<<" times"<<endl;
		}
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值