POJ 1350 Cabric Number Problem (6174問題)

來源:互聯網
上載者:User

就是輸入一個數,對這個數的每位排序,分別排成一個最大數和最小數,求其差作為下次操作的數,直到差為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;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.