GitBook

这里写图片描述 用的家里的小破笔记本 编译器好像还出了点问题 所以用的在线编译器…… 在这里也是分享一下: Ideone.com

这一题的思路是循环计数直到它和变化之后的数相同

#include<stdio.h>
#include<algorithm>
using namespace std;
int ex(int m) {
	int a[4];
	a[0]=m/1000;
	a[1]=(m/100)%10;
	a[2]=(m/10)%10;
	a[3]=m%10;
	sort(a,a+4);
	int sum1=a[3]*1000+a[2]*100+a[1]*10+a[0];
	int sum2=a[0]*1000+a[1]*100+a[2]*10+a[3];
	return sum1-sum2;
}
int main() {
	int T,m;
	scanf("%d",&T);
	while(T--) {
		scanf("%d",&m);
		int cnt=0;
		while(ex(m)!=m) {
			cnt++;
			m=ex(m);
		}
		printf("%d\n",cnt+1);
	}
	return 0;
}

不过从标程来看 似乎最终总是会变化成6174 不得不说数学还是挺奇妙的 (貌似以前听说过这个规律) 思路还是一样的

 
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
	//freopen("1.txt","r",stdin);
	int k;
	cin>>k;
	while(k--)
	{
		int n,a[4],n1,n2;
		scanf("%d",&n);
		int s=1;
		while(n!=6174)
		{
			a[0]=n%10;
			a[3]=n/1000;
			a[1]=n/10%10;
			a[2]=n/100%10;
			sort(a,a+4);
			n1=1000*a[3]+100*a[2]+10*a[1]+a[0];
			n2=1000*a[0]+100*a[1]+10*a[2]+a[3];
			n=n1-n2;
			s++;
		}
		printf("%d\n",s);
	}
}        

题目地址:【NYOJ】[57]6174问题