1019. 数字黑洞 (20)

来源:互联网 发布:淘宝大金空调贴牌造假 编辑:程序博客网 时间:2024/06/04 23:23

#include<stdio.h>#include<algorithm>#include<iostream>using namespace std;bool cmp(int x,int y){if(x!=y) return x>y;//若是x>=y,not all control paths return a value意思就是你得return a value whatsoever}int main(){int N,max,min;scanf("%d",&N);//输入不用加换行if(N<=0 || N>=10000) return 0;    //考虑到6174也要执行一次循环,采用do-while格式do{int a[4]={0};a[0]=N/1000;a[1]=N/100%10;a[2]=N/10%10;a[3]=N%10;if(a[0]==a[1] && a[1]==a[2] && a[2]==a[3]){printf("%04d - %04d = 0000\n",N,N);break;//return 0;//换成break更快}sort(a,a+4,cmp);max=a[0]*1000+a[1]*100+a[2]*10+a[3];min=a[3]*1000+a[2]*100+a[1]*10+a[0];N=max-min;printf("%04d - %04d = %04d\n",max,min,N);}while(N!=6174);return 0;}//////////法2,更快/////////////////////////////*#include <cstdio>#include <iostream>#include <vector>#include <map>#include <list>#include <assert.h>#include <string>#include <algorithm>#include <set>#include <queue>#include <fstream>typedef long long ll;using namespace std;#define MAX_N 100001int n,l;#define INPUT cin>>nvoid reverse(int t,int&a1,int& b1){assert(t<10000);int a[4];for(int i=0;i<4;i++)a[i]=t%10,t/=10;a1=b1=0;sort(a,a+4);for(int i=3;i>=0;i--)a1=a1*10+a[i];for(int i=0;i<4;i++)b1=b1*10+a[i];}int main(){#ifdef _DEBUG ifstream cin("input.txt");while(INPUT)#elseINPUT;#endif{while(1){int r,r1;reverse(n,r,r1);n=r1;printf("%04d - %04d = %04d\n",r,n,r-n);if(r-n==0||(r-n==6174)){break;}n=r-n;}}    return 0;}*/



原创粉丝点击