【NYOJ】[1057]6174问题

文章字数:274

问题描述

问题分析

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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
不得不说数学还是挺奇妙的
(貌似以前听说过这个规律)
思路还是一样的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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);
	}
}        

题目地址:6174问题

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...