PAT B1019 数字黑洞 /A1069 The Black Hole of Numbers

方法1:

#include<iostream>
#include<stdio.h>
#include<algorithm>
bool cmp(int a,int b){ //递减排序 cmp 
	return a>b;
}
using namespace std;
int main(){
	int  N;
	cin>>N;
	int s1[4];
	int s2[4];
	int t = N;
	int index = 4;
	while(index--){
		if(t!=0){
			s1[index] = t%10;
			s2[index] = s1[index];
			t= t/10; 
		}
		else{
			s1[index] = 0;
			s2[index] = 0;
		}
	}
	bool flag =true;
	int num1,num2;
	while(flag){
		sort(s1,s1+4,cmp);
		num1 = s1[0]*1000+s1[1]*100+s1[2]*10+s1[3];
		sort(s2,s2+4);
		num2 = s2[0]*1000+s2[1]*100+s2[2]*10+s2[3];
		printf("%04d - %04d = %04d\n",num1,num2,num1-num2);
		num1 =num1-num2;
		if(num1==0||num1==6174){
			flag = false;
		}	 
	 	int t = num1;
		index = 4;
		while(index--){
			if(t!=0){
				s1[index] = t%10;
				s2[index] = s1[index];
				t= t/10; 
			}
			else{
				s1[index] = 0;
				s2[index] = 0;
			}
		}
	}
	return 0;
}

方法二:

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){ //递减排序 cmp 
	return a>b;
}
int main(){
	int  N;
	cin>>N;
	int s1[4];//保存 非递增排序 
	int s2[4];//保存 非递减排序
	int t = N;
	int index = 4;
	while(index--){
		if(t!=0){
			s1[index] = t%10;
			s2[index] = s1[index];
			t= t/10; 
		}
		else{
			s1[index] = 0;
			s2[index] = 0;
		}
	}
	bool flag =true;
	while(flag){
		sort(s1,s1+4,cmp); //对s1数组中元素从大到小排序 
		sort(s2,s2+4); //对 s2数组中元素从小到大排序 
		cout<<s1[0]<<s1[1]<<s1[2]<<s1[3]<<" - "<<s2[0]<<s2[1]<<s2[2]<<s2[3]<<" = ";
		//Sub
		for(int i = 3;i>=0;i--){
			if(s1[i]<s2[i]){
				s1[i] = s1[i] + 10 -s2[i];
				s1[i-1]--;
				s2[i] =s1[i];
			}
			else{
				s1[i] = s1[i] -s2[i];
				s2[i] =s1[i];
			}	
		}
		cout<<s1[0]<<s1[1]<<s1[2]<<s1[3]<<endl;
		flag =!(s1[0]==0&&s1[1]==0&&s1[2]==0&&s1[3]==0)&&!(s1[0]==6&&s1[1]==1&&s1[2]==7&&s1[3]==4);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiu_cs

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值