就是輸入一個數,對這個數的每位排序,分別排成一個最大數和最小數,求其差作為下次操作的數,直到差為0或者6174位置..
這題很陰啊,輸入一定為4為,否則就OLE..
注意對操作後不滿四位的數的處理
#include <cstdio>#include <algorithm>using namespace std;int cant(int s){int a=s/1000;int b=s/100%10;int c=s/10%10;int d=s%10;if(a==b&&b==c&&c==d)return 1;return 0;}int cal(int s){int bn=s;int a[4];a[0]=s/1000;a[1]=s/100%10;a[2]=s/10%10;a[3]=s%10;int fl=0;//標誌高位有幾位為0; if(a[0]==0){fl=1;if(a[1]==1){fl=2;if(a[2]=0)fl=3;}}sort(a,a+4);int bnum,snum;snum=a[0]*1000+a[1]*100+a[2]*10+a[3];// 處理高位為0的情況 if(fl==0){bnum=a[3]*1000+a[2]*100+a[1]*10+a[0];}else if(fl==1){bnum=a[3]*100+a[2]*10+a[1];}else if(fl==2){bnum=a[3]*10+a[2];}else{bnum=a[3];}printf("%d-%d=%d\n",bnum,snum,bnum-snum);return bnum-snum;}int main(){int n;while(scanf("%d",&n)&&n!=-1){printf("N=%d:\n",n);if(n>=9999||n<=1000||cant(n)){//注意,輸入一定要是4位元!!否則OLE printf("No!!\n");continue;}int times=0;while(n!=0&&n!=6174){times++;n=cal(n);}printf("Ok!! %d times\n",times);}return 0;}