poj解题报告——1350

来源:互联网 发布:材料 光电 考研 知乎 编辑:程序博客网 时间:2024/06/08 02:47

        输入一个数,对这个数的每位排序,分别排成一个最大数和最小数,求其差作为下次操作的数,直到差为0或者6174位置

#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;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];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)){printf("No!!\n");continue;}int times=0;while(n!=0&&n!=6174){times++;n=cal(n);}printf("Ok!! %d times\n",times);}return 0;}


0 0
原创粉丝点击