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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章