xtu oj 1191 Magic

题目描述

6174是一个神奇的数字,你将一个4位数n(只要这4位数码不完全一样)所有数码按升序和降序分别得到A和B,取n=B-A,如果n不为6174的话,继续迭代上面的过程,直到n为6174。 比如

no. n    A    B 
0   1000 0001 1000
1   0999 0999 9990
2   8991 1899 9981
3   8082 0288 8820
4   8532 2358 8532
5   6174
 

请问需要迭代多少次才能达到6174?

输入

每行一个4位整数n,并且n的所有数码不完全相同。如果n=0表示输入结束,不需要处理。

输出

每行输出一个样例的结果。

样例输入
1000
6174
0

样例输出
5
0

AC代码

#include
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF){
		int cnt=0;
		if(n==0)break;
		while(n!=6174){
		  int t=n;
		  int a[5]={};
		  int i,j,k=0,tem1;
		  while(t!=0){
		 	 a[k]=t%10;
		 	 t/=10;
		 	 k++;
		  }
		  for(i=0;i<3;i++){//升序排列 
			 for(j=i+1;j<4;j++){
				if(a[i]>a[j]){
					tem1=a[i];
					a[i]=a[j];
					a[j]=tem1;
				}
			}
		 } 
		 int A=a[3]+a[2]*10+a[1]*100+a[0]*1000;
		 int B=a[0]+a[1]*10+a[2]*100+a[3]*1000;
		 n=B-A;
		 cnt++;
	}
	printf("%d\n",cnt);
}
 } 

利用循环求解重复问题。

你可能感兴趣的:(算法,c#,c语言)