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

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

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

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

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

请输入一个互不相同的四位数:37583 W9 l7 O; Y! e7 D
输入的四位数是:37583 k) N" B1 H4 Z! }' L: S. f
第1次:8753 - 3578 = 51751 W6 T8 c2 |: D5 g: I0 ?$ P
第2次:7551 - 1557 = 5994
5 W3 }4 G- v4 }9 z0 Y$ Y第3次:9954 - 4599 = 5355
& e: K& G) m- ^  }; r  h第4次:5553 - 3555 = 1998$ P: z* U9 [2 n7 w
第5次:9981 - 1899 = 8082# t8 \; W  a* L; b0 N: |( V2 Q
第6次:8820 - 288 = 8532! P8 a- F# u$ M( y  C
第7次:8532 - 2358 = 61741 F3 ~/ `  h7 X; w, O# l* e
经过了7次最大减最小的动作
1 g9 g# ]4 k/ u6 e2 K: e6 [9 l* y5 J
请输入一个互不相同的四位数:25172 \' @+ @! Q! w: D/ u4 c+ H
输入的四位数是:2517  I0 _, N8 @* T0 s6 y: i
第1次:7521 - 1257 = 6264% }# ]; ^8 h3 M" e) e0 P
第2次:6642 - 2466 = 4176# i7 @2 O% u8 Y. h
第3次:7641 - 1467 = 6174
0 x  K) r. O7 O0 ]( P经过了3次最大减最小的动作  W4 N, \: |; q; N0 {$ J
请输入一个互不相同的四位数:6915- d: ^5 v2 F! t6 M- h
输入的四位数是:6915
# {5 k' C% Z; v' m- I第1次:9651 - 1569 = 8082
6 u  z) T& s; n; r& W9 d1 }第2次:8820 - 288 = 8532
0 g0 @( W. H: z% W第3次:8532 - 2358 = 6174
0 ?( E+ N$ i; j经过了3次最大减最小的动作
& u+ R" f* G$ c+ y
请输入一个互不相同的四位数:9073/ L9 M( E( z1 ?+ u4 @/ V3 e
输入的四位数是:9073
+ k8 T0 R2 i' W  t/ `第1次:9730 - 379 = 9351& }% t) ~) q6 D0 H& C; O! O
第2次:9531 - 1359 = 8172$ ~; [& t$ h# O. |* Y: V0 z
第3次:8721 - 1278 = 7443" C; D. g) w' T5 @
第4次:7443 - 3447 = 3996" O  \: }/ A. Q* v# X3 k9 z% P
第5次:9963 - 3699 = 6264
; C5 ~8 d  x' u1 \7 [! B/ [第6次:6642 - 2466 = 41768 i3 }: q4 i. g8 ^% L2 y
第7次:7641 - 1467 = 6174! h1 n1 t4 |' q. [1 z
经过了7次最大减最小的动作
: w; [* T* j4 R. M. Z  L
请输入一个互不相同的四位数:52875 R4 r) ~5 F: R: u# `
输入的四位数是:5287
1 \* ?- a0 e3 X$ b- G2 [第1次:8752 - 2578 = 6174
2 T3 ~, t+ `& S; E经过了1次最大减最小的动作! d: W2 L" [, h! D3 U$ }4 E

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

代码实现#include <stdio.h>! L2 Y+ N0 j: H4 \

" T* A1 {  p5 R" Q7 X. p/ Tint convert(int number[],int ans);2 M7 i4 G5 c9 f& s' x; U
int *sort(int number[],int len);
" i7 y/ h2 Y) G+ {- K6 _4 K! B" E" S5 H0 F! m# X
int main(void)
3 J  K; P2 B5 P, o1 i, {{
' `* P: W; U4 J8 o! n* L5 ^    int number[4] = {0};% B4 M% D! G4 w% B5 G
    int *p = NULL;
0 L: [3 U0 k/ ?/ I+ j& U    int n = 0;4 O* C7 I/ [& |2 |9 Z' O7 @0 X
    int ans = 0;2 V: S7 }8 b  Z  G! `8 z
    int count = 0;% d8 S; [) t$ c& H
    printf("请输入一个互不相同的四位数:");
! A* h1 O3 E; [2 M0 a% T: d+ J    scanf("%d",&n);
! v& h3 ^( ]1 Q# I. O0 ?4 k1 N) ?    printf("输入的四位数是:%d\n",n);
  }1 K! s( M2 N6 J& h    ans = n;- E4 b2 y% g/ S2 J& M
    while(ans!=6174)1 N# _4 y6 u8 T, X3 f2 _
    {
& W( C! j' c) V. o  R. G        ans = convert(number,ans);
2 z6 ?; N" p" l        printf("第%d次:%d\n",count+1,ans);5 I. R! {6 \& ^* m0 A
        ++count;, _3 U$ i* o6 |' n: H
    }
$ w4 Z. B4 D( f# S, B    printf("经过了%d次最大减最小的动作\n",count);
0 n8 s) S. F: ^- ~5 o# \* j    return 0;
& I/ U/ {, d8 `}
4 l1 T. [8 k0 ^' l; Z' m( k) G: k; R
3 R$ S: ^# ]5 g# N' W+ z! pint *sort(int number[],int len) //大到小的排序
+ M- R9 m, E& X; e2 p1 G{! i  {3 Q# G* M# d: Z4 }& Y
    int a =0;$ p5 d' t0 y1 }3 Z
    for(int i=0; i<len; ++i)
9 ^1 Q- q' r- y3 [! i    {
) g$ g( J% m% S        for(int j=i+1;j<len;++j)
/ @; `0 p- h* u% T4 A* v0 b2 c        {& B# T  z" H0 U4 j0 X& k1 b+ q
            if(number <number[j])
6 Z% E' C! }9 p/ v7 S$ X; @: q/ y& z# ]            {3 \0 \1 K# e  _9 L- {" M; N& Q
                a = number;* O: S2 x. y6 ^/ E3 F  N3 @
                number = number[j];, _7 a" R* K5 U$ p7 Y3 O$ T: i! ~
                number[j] = a;$ n. |. w- |1 ~0 k4 N5 ^' G
            }; ]/ t" J+ [" ~  ?6 ^/ I0 \
        }! K$ r% V, x' H; y5 b/ A
    }. q  r1 N: O0 n$ c0 t$ g5 n* K# {% }( `# j5 _
    return number;: J" M, l4 e; o
}
. P9 D' i: R2 K. e1 Hint convert(int number[],int ans)//每次变换得到的数字
0 d8 x* W* ?. g) p: Y{5 P* \7 L; Q; M- f* r! i
    int *p = NULL;
, F3 T+ E5 ~# L$ N. y8 `    int m=0;0 m5 x3 L* |: P/ E' s3 ]$ m  U* o
    number[0] = ans/1000;  //把这个数放入数组7 G: e- E7 T& o; ?$ B  u
    number[1] = ans%1000/100;
! j2 ^% K& B: I    number[2] = ans%100/10;
$ ^# L% C# ?$ M9 X1 q, P5 \    number[3] = ans%10;, v+ ~! w) R4 J4 g  G- Z
    p = sort(number,4);4 l$ l) i/ S) Q# A0 k, c
    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字
' p! x6 Y6 |1 T  o: E5 [0 s. |5 S- y    return m;
8 _# Y2 Q: _- n; ?5 J}
) Y$ B9 b/ N( N, R, F0 {
运行结果: 微信图片_20201204213952.png
' D3 [' X; S  e" S/ B
* [1 [! ~$ D. Z& b+ j6 t, ~
收藏 评论1 发布时间:2020-12-4 21:44

举报

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

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版