首页 > 代码库 > 模拟poj1350

模拟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++;
else
break;
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;
}

 

模拟poj1350