你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C语言“最大减最小”的动作

[复制链接]
gaosmile 发布时间:2020-12-4 21:44

任选4个不完全相同的数字(像1111就不行),让“最大排列”减“最小排列”(例如8753-3578),不断重复这个动作,最后一定会得到相同的结果:6174。神奇的是:这个“最大减最小”的动作,最多不会超过7次!

我们先来看看五组实验结果

请输入一个互不相同的四位数:3758
* g: G, C; ?8 z! c8 D4 m7 G输入的四位数是:3758
5 J9 v) A6 n2 _6 K# q! y, W; q第1次:8753 - 3578 = 5175
, N( f  l) g5 n+ W" R% Y) i) }第2次:7551 - 1557 = 59942 B! S& ~2 E( E7 `% Y! X5 x' ]2 X3 N
第3次:9954 - 4599 = 5355
5 J* V5 H! Q( k第4次:5553 - 3555 = 1998( x" d6 w$ Y, Z& ?
第5次:9981 - 1899 = 8082
' ?( d* C* k; c' r9 Z$ A5 b第6次:8820 - 288 = 8532) h# ]2 K. Y3 i! s& V+ }4 |
第7次:8532 - 2358 = 6174( Y9 D6 E* x% ~9 R* o8 Q. N
经过了7次最大减最小的动作& c2 C8 ^4 j5 u& \* [* Y
请输入一个互不相同的四位数:2517% K7 o5 O6 v0 i. X; Q! s
输入的四位数是:2517
& `1 r$ A% [$ V" _8 n2 R第1次:7521 - 1257 = 6264$ l) c: I: K. `! O( k9 w
第2次:6642 - 2466 = 4176
. Z  g: j( I! w& R' k# D, B9 G第3次:7641 - 1467 = 6174
( E0 W7 m1 \; G8 n经过了3次最大减最小的动作
  {  f4 d9 v7 ]# D' a
请输入一个互不相同的四位数:6915
" I8 Y, |& y9 j输入的四位数是:6915
+ ^4 W+ a( ~/ p" z7 ?8 d第1次:9651 - 1569 = 8082. ]# y5 N: W: }* E4 o
第2次:8820 - 288 = 8532- W$ U  x, e& X0 p
第3次:8532 - 2358 = 6174; z! w! y" Q- P5 ]: S$ O0 z
经过了3次最大减最小的动作
% B( t9 ?) P9 U
请输入一个互不相同的四位数:9073
3 c7 w: r" k1 P# h输入的四位数是:9073+ B, k6 p$ e2 ?1 T7 K; O; O7 h* ~
第1次:9730 - 379 = 9351
! f8 A7 h6 O- M第2次:9531 - 1359 = 8172; H% T3 c7 l" P4 y/ H" O. n4 D- z9 W
第3次:8721 - 1278 = 7443
5 F. W9 f+ ^, Y" s) y  A) F第4次:7443 - 3447 = 3996
3 s( `& G( {1 O/ j第5次:9963 - 3699 = 6264- r# Z7 _8 ?1 |( |7 B  l
第6次:6642 - 2466 = 41766 j2 i$ V4 o: u3 N0 e; q
第7次:7641 - 1467 = 6174  @6 Z* y4 O4 ?4 [2 U
经过了7次最大减最小的动作/ [' y7 c5 I  k! _+ m4 i; e8 G
请输入一个互不相同的四位数:52878 S  c: l# ?1 Z0 U
输入的四位数是:5287
7 N1 E4 g: L: ^第1次:8752 - 2578 = 61746 R7 h8 K5 g+ g
经过了1次最大减最小的动作" I  I" n0 j# _2 _9 Y' W) I5 q

接下来我们用C语言代码进行验证,代码实现如下。

代码实现#include <stdio.h>8 N& }3 F$ S# A

' {* g# \9 u) `' m4 ?int convert(int number[],int ans);$ T0 w4 q, B& @5 H  F5 N
int *sort(int number[],int len);" {  ^) p% E& y/ H1 n4 }

2 g7 c8 i- y' x. J0 C5 pint main(void)  p' a: M% J" T  _8 C$ ]
{& N; a: e( A) b
    int number[4] = {0};
2 z  \2 _) _+ ~6 ~, A    int *p = NULL;
# U) B4 X6 A/ ^$ i8 N5 x$ a1 }! M! o6 c    int n = 0;
; F( b# H' Q! o. ^6 t    int ans = 0;& v; E; f2 Y# G4 }; b
    int count = 0;
, x- S" Y: n$ u0 ^6 I    printf("请输入一个互不相同的四位数:");* N1 ^" j8 K" y$ z( U1 R
    scanf("%d",&n);1 e# n# o* V0 G; U& b# V* h
    printf("输入的四位数是:%d\n",n);5 ~1 a# m' t* C8 W  Y# ~  o& S' ]
    ans = n;! J3 M/ P* _! r
    while(ans!=6174)
  t; h1 U3 S  h% {2 I) r  Z    {
. T' m: _- |  r        ans = convert(number,ans);* A8 y# X$ p* S8 m* c6 E$ n9 \5 K! U
        printf("第%d次:%d\n",count+1,ans);
( U! |" \1 N# `% C- l        ++count;/ F$ b% N# Y8 t& k  o7 k6 H
    }
1 u: ~! {; \- O7 d  s( |" {    printf("经过了%d次最大减最小的动作\n",count);
" W( @4 C+ |/ y3 i, m. \( R8 ~    return 0;
1 {5 ?4 `3 d" z6 G& `$ ?}
$ ]+ T' L% F$ t6 q) e9 ~: Q( ~8 O
int *sort(int number[],int len) //大到小的排序
- I! R% m& ^: j  W4 _{
, f/ y0 ^& ?5 P    int a =0;( K3 _. H8 {9 J# {# \/ Z
    for(int i=0; i<len; ++i)
  \$ i  Q+ k9 t; Q    {
1 B( e. e, h6 j1 ?, y        for(int j=i+1;j<len;++j)% ?. O- R- `! n  ?
        {( _2 P, Q/ \1 a4 I. S% H
            if(number <number[j])% J1 R$ ~; P4 a1 ~) d6 x+ p% U
            {
8 }) x8 G  N8 C5 Y! R1 U. {                a = number;) f" g2 F. T* k2 S" g% k2 \
                number = number[j];1 R- m! e5 w* v2 B; c
                number[j] = a;9 V% Q7 U, z  _9 Z( n
            }  S% G7 z1 B( R3 r1 ?1 a1 ~' R9 v; H
        }" i3 c% y  P- {, a
    }" E# Z7 y+ V" g4 t2 h- h8 a4 N
    return number;, u2 a0 ^* v' A" f. s2 H
}: m/ z0 i- `0 x
int convert(int number[],int ans)//每次变换得到的数字0 J$ {% X2 n# r$ u7 _
{
/ x- |. i( N5 A    int *p = NULL;& K4 Y9 t) }/ ^: H
    int m=0;3 B# Q, Q( ?2 K  O- ]. i4 v7 Q
    number[0] = ans/1000;  //把这个数放入数组
1 n3 O9 ]% ^6 r- U3 Z1 P4 \* [    number[1] = ans%1000/100;
6 h! w. d9 v- E* p. K) O0 F    number[2] = ans%100/10;5 o/ o/ o9 ]% Z( }6 G6 j
    number[3] = ans%10;3 k, `! f8 n  \+ m- ^7 y
    p = sort(number,4);
5 B' \! X- R! k& b% u    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字' n% \6 x& ]4 B( a1 G9 k3 y9 p
    return m;3 w% h. Q, I$ k3 W6 C
}
8 o* S7 a( G% `1 F  ~
运行结果: 微信图片_20201204213952.png
, G( U. D8 v4 {1 k' D7 W0 c) X( d) \9 S4 V% T( m2 Y0 J
收藏 评论1 发布时间:2020-12-4 21:44

举报

1个回答
goyhuan 回答时间:2020-12-5 13:51:19
这是什么原理?

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版