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

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

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

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

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

请输入一个互不相同的四位数:37580 `+ Q7 m& p& i# ?+ W- G, P8 a0 w
输入的四位数是:3758% r* V' o% Y; d6 ~* X3 E
第1次:8753 - 3578 = 51759 _' U% s" H  ?4 G7 b. O7 ^) w5 Q
第2次:7551 - 1557 = 5994
  s; A% I" X) T8 N4 }% |2 e7 M5 U第3次:9954 - 4599 = 5355
$ T% Y$ Q2 _) w; o! ]8 g第4次:5553 - 3555 = 1998+ G( V" j( _1 D& L  o1 f/ ]) I2 T
第5次:9981 - 1899 = 8082
/ Z. I" `; Y2 `8 b( t第6次:8820 - 288 = 8532
5 t- _7 E$ w, u' `第7次:8532 - 2358 = 61742 D% k: g0 m" @/ Q& N
经过了7次最大减最小的动作
) H, B. Z) Q7 p9 n& r
请输入一个互不相同的四位数:2517
8 y* ]# U: y1 g& G输入的四位数是:2517/ y' d4 h6 i& A" Y: r% ]! y& ~
第1次:7521 - 1257 = 6264
( b' d& J& U4 t$ V第2次:6642 - 2466 = 4176
1 h, C; f) k; C& D  m& N第3次:7641 - 1467 = 6174
* S' v1 _7 J4 E+ _经过了3次最大减最小的动作
. ~4 J- H4 I" Y( V3 F) l  x
请输入一个互不相同的四位数:6915
2 f- o! k& L% _% Z& X- n# {8 S: p输入的四位数是:6915
7 B  H; f; H) `1 x/ A第1次:9651 - 1569 = 8082
  l" Y4 G; X' w第2次:8820 - 288 = 8532$ J7 ^/ n* J0 |" ^
第3次:8532 - 2358 = 6174# g" `7 G/ Q8 r& @: @6 c2 g; `
经过了3次最大减最小的动作
$ ~; g" [- f6 |) a
请输入一个互不相同的四位数:9073
# F1 @. Q& Z8 s+ ]8 f- }; f. Z输入的四位数是:9073
5 Q# c& L- N4 ?. N: X第1次:9730 - 379 = 9351
/ f3 Z* x3 M* _4 N4 }第2次:9531 - 1359 = 8172: U: [! C( f5 v9 t4 }+ b' x
第3次:8721 - 1278 = 7443
$ E: t6 G2 u) o5 R$ b第4次:7443 - 3447 = 3996
! ?7 g' f4 `( N& o第5次:9963 - 3699 = 6264- X8 r8 X- b1 y/ q. m& }
第6次:6642 - 2466 = 41764 L* X. g/ W* X- I  Q6 k1 ^8 l' R
第7次:7641 - 1467 = 6174, P$ k6 t" c$ u  a) V2 V0 |0 D
经过了7次最大减最小的动作
" V9 T; @- Q) g: d& i1 }
请输入一个互不相同的四位数:5287+ |+ b% s) i: p" |
输入的四位数是:5287
: P4 B7 H3 E  T/ h3 F) X- w& X第1次:8752 - 2578 = 61744 p8 D, A$ Z0 K6 `0 T$ B& A, N4 j
经过了1次最大减最小的动作) R% h- T7 N4 k' G

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

代码实现#include <stdio.h>
+ K4 t0 _; A3 s4 E9 Y& m
' J: U& w4 |! Cint convert(int number[],int ans);
$ Z5 O9 `/ b7 }/ x% jint *sort(int number[],int len);/ n2 c0 b7 [* ~4 T* B

. R5 D" E# g* _4 hint main(void)
  t6 k3 q& Y4 @. m$ C; ?- H{
- ]8 L$ J# v8 t  a% d9 m( p    int number[4] = {0};! q, _& R7 w3 ^
    int *p = NULL;
6 W) u9 ~: A8 K6 |, V8 x8 ~1 Z  B; O    int n = 0;
  Z4 W3 `/ y- g1 D    int ans = 0;" ^2 V) E/ Y" {$ l
    int count = 0;
- z/ V& A3 S0 p) H" h. E" {" U& n! [    printf("请输入一个互不相同的四位数:");+ s$ L; i1 L4 ]8 J9 i3 ]  x
    scanf("%d",&n);& d" n. Y  z6 J* e) u+ S' @
    printf("输入的四位数是:%d\n",n);
2 a4 S. i# p# y; M1 A2 R: G$ ~. d! T    ans = n;
; i9 B6 e" K, u* f; g    while(ans!=6174)
* V9 t& }  a' j0 }    {
! Z3 y2 ?  q8 @        ans = convert(number,ans);$ j, q& E, [0 J. Y1 w# s
        printf("第%d次:%d\n",count+1,ans);
* Z7 J+ @  F8 x/ Y        ++count;2 z1 h" G+ k! s6 F# F% H
    }
1 |8 g, m% R- A* V: Y    printf("经过了%d次最大减最小的动作\n",count);
* A. |" S! z% G5 o- j    return 0;; d9 m& N$ e) {+ M' H3 L! P
}
+ G' W: z( u5 E* }. v( T; A; k
& g2 k$ K; i; V4 N! y- Rint *sort(int number[],int len) //大到小的排序
, @+ A7 ]& U. c* v" i; f0 e( F{* p) {( C3 d  C. a8 p) j& q0 m. V" Q
    int a =0;% h- T$ D0 [/ e
    for(int i=0; i<len; ++i)1 d# ]. ]; L. ^9 n
    {4 M3 N8 S: W# ~, o' }. Y
        for(int j=i+1;j<len;++j)
9 i: Y+ p- z) _! l1 B        {5 x  C' I) n0 m8 z# ]% N- h0 P
            if(number <number[j])
1 \. b5 K! l( a" e/ U5 s            {4 D/ z* l3 k8 f3 p
                a = number;0 N  w4 m  J! p  @$ y2 r; a" I. G
                number = number[j];
7 }* \1 R) ~9 d                number[j] = a;7 e1 L2 x* F4 \+ K/ ]
            }, h: I& o) Q/ k1 v* H3 P
        }7 F+ o/ b5 ]# D' a* z" ?8 A1 U
    }
9 J! I. i' i. l# ^    return number;0 m! J- Q; V$ p
}
4 f9 T3 L" Y) O2 U' Hint convert(int number[],int ans)//每次变换得到的数字
3 y; D. t# u  i* v; A7 Y{
% \& G. }" ?  p- y& R! y* k    int *p = NULL;
2 `, W( M# w" z% t" H  |    int m=0;
& T6 o8 K3 i, v. v/ \6 z    number[0] = ans/1000;  //把这个数放入数组& y( x* f* Q/ l% O
    number[1] = ans%1000/100;: {4 }+ v5 a% L
    number[2] = ans%100/10;
+ J4 H. y- ]3 K2 U5 c" f) L    number[3] = ans%10;
' w, w6 E# A1 Z! l, {    p = sort(number,4);
. A; D5 t! ?( ~2 T- e- B+ k' a& A    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字
1 ?# \% k5 @  u    return m;
) i9 ?6 G- N0 q  }. S6 L}
" n% H6 g; t+ p% H  N
运行结果: 微信图片_20201204213952.png
; B0 I, v; }7 s1 A2 L- |0 O7 R& F
收藏 评论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 手机版