模拟poj1350

来源:互联网 发布:行知教育集团 编辑:程序博客网 时间:2024/06/10 21:22

模拟poj1350

http://poj.org/problem?id=1350

题意:给你一个数,你用这个数重排序后的最大值减去最小值,当这个差值等于0或者6174时就结束,否则就用这个差值再排序再求差值。如果这个数不是四位数或者这个数的每位都相等时就输出"No!!",否则输出"Ok!! n times",n是前面直到那个数为0或者6174经过的次数。

AC代码如下:

#include<stdio.h>#include<stdlib.h>#include<iostream>#include<algorithm>using namespace std;int a[5];int main(){int n;while(~scanf("%d",&n)){int flag=0;if(n==-1)break;printf("N=%d:\n",n);a[0]=n/1000;a[1]=n/100%10;a[2]=n/10%10;a[3]=n%10;int cnt=0;int ans=n;if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]||n>=10000||n<1000)printf("No!!\n");else{while(1){cnt++;a[0]=ans/1000;a[1]=ans/100%10;a[2]=ans/10%10;a[3]=ans%10;int q=0;for(int i=0; i<4; i++)if(a[i]==0)q++;elsebreak;sort(a,a+4);int x=a[0]*1000+a[1]*100+a[2]*10+a[3];int y=a[3]*1000+a[2]*100+a[1]*10+a[0];while(q){y/=10;q--;}ans=y-x;printf("%d-%d=%d\n",y,x,y-x);if(ans==0||ans==6174)break;}printf("Ok!! %d times\n",cnt);}}return 0;}