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

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

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

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

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

请输入一个互不相同的四位数:3758
3 x) j' a: |! c4 x+ k" u& a输入的四位数是:3758$ b' E7 _# b" H* p
第1次:8753 - 3578 = 5175
, k* O+ K! }$ K第2次:7551 - 1557 = 5994
1 I' F+ p. j3 D' l第3次:9954 - 4599 = 5355
$ @7 V( l% k5 C5 s! Q第4次:5553 - 3555 = 1998
! t8 L- W# W) f7 h7 Q4 L! H9 V9 \+ E第5次:9981 - 1899 = 80821 S" J( u: e4 e/ A
第6次:8820 - 288 = 8532+ K9 q8 w6 D" N# v! v9 e
第7次:8532 - 2358 = 6174/ S4 ?" B- W& d5 v5 f5 O6 t
经过了7次最大减最小的动作
; d, U' o6 h$ p! ]) G' ^, ~
请输入一个互不相同的四位数:2517  v& L. R) H2 W. I5 y" f
输入的四位数是:2517
( R/ B( U. g6 `1 }4 A# `第1次:7521 - 1257 = 6264
9 K3 b) ?1 C1 q  f8 L3 B第2次:6642 - 2466 = 4176
* a/ r1 v5 L* @! C! `# C- b' `& T; e第3次:7641 - 1467 = 6174+ [) A1 b; G( J! \8 h: _: d% d
经过了3次最大减最小的动作
/ {% [( _& Q, ~1 r
请输入一个互不相同的四位数:6915
/ n& ]" h# R5 A- a2 S输入的四位数是:6915
. U) t: m. s* @0 f1 o& M+ E# Y第1次:9651 - 1569 = 8082
' l- c8 a5 V- @8 q第2次:8820 - 288 = 8532
& n  F) \) ~6 \  V, q/ ?第3次:8532 - 2358 = 6174+ N% y: i: {) g, G
经过了3次最大减最小的动作) T% f. x0 i3 B% b+ c  Z  P
请输入一个互不相同的四位数:9073
( V6 E5 V( q* U9 K$ Z( A5 m输入的四位数是:9073
6 J* _5 v; `! c8 \/ h第1次:9730 - 379 = 9351% X# g% i, t, A1 w
第2次:9531 - 1359 = 8172
9 s& C3 R7 K7 L- R0 X6 m/ J# d0 u/ t第3次:8721 - 1278 = 7443
3 Q$ o: Z3 F! j$ W& t第4次:7443 - 3447 = 3996
6 d% Q* ~% @$ L+ O9 V/ W9 W+ i* J3 M第5次:9963 - 3699 = 6264$ K; b/ p0 @6 u3 B2 Q
第6次:6642 - 2466 = 4176
( E. ~3 r0 ~% ~$ e第7次:7641 - 1467 = 6174
( @0 H$ \" @  c  v9 c4 |1 a3 @+ {' s经过了7次最大减最小的动作
2 y" a& [* k. \; F
请输入一个互不相同的四位数:5287
( E" e4 H+ U. P. U输入的四位数是:52876 ]. Y+ S! C4 ^6 ~
第1次:8752 - 2578 = 6174
$ j% Q- @1 _- s经过了1次最大减最小的动作* i5 m# @/ d& y# Q$ _5 [2 ], \" X1 c

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

代码实现#include <stdio.h>" D) c3 J5 n8 T6 f$ k

% {" b, r. P0 [+ _+ C* Gint convert(int number[],int ans);
' G; s# F- G6 W3 I! O2 _* \int *sort(int number[],int len);6 d+ U7 n3 A4 I0 u8 R

1 R" ?/ M( D( i6 fint main(void)
" s( m9 J: h# a1 G{& }7 h' }: ]( y5 L
    int number[4] = {0};
4 o) T5 {2 U3 V1 Q6 v    int *p = NULL;
: h) }# h7 g( `  g3 J    int n = 0;9 Q# M! X4 |$ J" D4 m; q
    int ans = 0;& M2 z& Y" L4 R; S4 g8 v
    int count = 0;/ x3 w# d; |- n5 N
    printf("请输入一个互不相同的四位数:");$ \: _; B5 ^7 Y, C5 A' U
    scanf("%d",&n);. m# S5 {1 j8 @* q( ^
    printf("输入的四位数是:%d\n",n);& `& I" [: N/ o% Y
    ans = n;. N4 ~2 ]* `3 N9 r
    while(ans!=6174)
. H4 K1 K, a  X8 Q4 S    {
; O2 H: Y6 I' {. D0 n1 A        ans = convert(number,ans);' U4 [; p# T: I
        printf("第%d次:%d\n",count+1,ans);, z0 q. b7 s5 T! B" z& q3 H
        ++count;
- K* |0 u9 b1 i2 E- O/ j    }0 k$ w; {4 [$ i7 Z, c
    printf("经过了%d次最大减最小的动作\n",count);
% T9 B* O( z, z6 X    return 0;- G2 t( l9 T( D" j5 F1 `5 l
}9 V4 W3 U& i9 X
( r$ I- k$ K; U: _* ^) x8 ?
int *sort(int number[],int len) //大到小的排序; T8 C6 j: b$ T7 L/ s  u( i* I& t
{
! L! L9 h4 g" I5 w, a% _4 d    int a =0;
3 d0 z  x' f$ s; t0 _" R    for(int i=0; i<len; ++i), S  t, M1 `  [; ], m
    {
0 j  E1 b. J7 V4 |* a  A# s        for(int j=i+1;j<len;++j)# x( P6 Y6 N' t+ G7 i
        {1 Z- ^# ~7 E, `$ |8 g: ]) g6 T2 ~
            if(number <number[j])
7 R8 r* |" ~$ [6 y9 E) Q            {& A& c8 i5 a7 I* w3 ~1 ?
                a = number;5 d# a: K/ T9 w7 I& n' l
                number = number[j];2 i0 Y% T2 b' v& Z
                number[j] = a;; g% {! T* l' Y4 D! v3 E2 U+ O
            }/ K  u2 K+ ~+ F
        }6 }) R: p# n! d
    }
0 ^5 G6 R! X8 V; D- O) d    return number;6 y6 k! @& Q! h7 V/ u" I) w! n
}
3 Y3 J2 j" k, @, dint convert(int number[],int ans)//每次变换得到的数字
- Y6 w$ i% P1 P) g$ x5 w7 W, H{
: j. W' ?' P& A- D  r. t$ X( r    int *p = NULL;7 z' p* L) E  @
    int m=0;
8 v( P$ v2 Z8 w% a! w: I+ G    number[0] = ans/1000;  //把这个数放入数组
- e: e3 B3 [7 X! {0 M# H& `    number[1] = ans%1000/100;
' A# d" J  a0 z: y5 }2 H    number[2] = ans%100/10;
! S( A9 k! K& i' v' z    number[3] = ans%10;; F4 y: p1 m" y0 V7 A  f) Y& J
    p = sort(number,4);; J( C3 d9 G3 p, z- A
    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字
3 {$ \/ o) W/ m1 {; r) [    return m;! b, x. |1 `9 d. u
}, |' ~8 ?$ P: N! y: H: S! {7 c
运行结果: 微信图片_20201204213952.png 3 U, D; r2 _1 ~6 k  K# x- Q
0 U% t0 h5 s: w" y8 A
收藏 评论1 发布时间:2020-12-4 21:44

举报

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

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版