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

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

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

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

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

请输入一个互不相同的四位数:3758: C$ I, {9 T# t* t8 B
输入的四位数是:3758
. G0 d0 Q2 H  n: M+ s2 t! ~$ a/ R第1次:8753 - 3578 = 5175
+ q/ K4 F# t0 Q- G) ?, h1 |: X  d第2次:7551 - 1557 = 5994
$ v4 a' _5 w( i' i第3次:9954 - 4599 = 5355
6 |0 c: ?/ Z) Z2 y8 @% H8 g9 Y  `第4次:5553 - 3555 = 19985 e! K5 y( c! R& j' [6 E# K& t
第5次:9981 - 1899 = 8082$ n+ L  @9 H5 v# g: ~0 F
第6次:8820 - 288 = 8532# ?9 ~, a7 B: @8 d
第7次:8532 - 2358 = 6174
0 X; i' b2 _5 P* M- Q2 `, z" c经过了7次最大减最小的动作
# Q6 ~# f6 O/ U% ^1 V, Z- f7 ?
请输入一个互不相同的四位数:2517
( w/ p0 i- {' j# J) ]9 N输入的四位数是:2517. F' N) h, k8 Z0 S
第1次:7521 - 1257 = 6264
. S/ |5 j0 U# @1 D第2次:6642 - 2466 = 4176! ?1 v$ ]% o6 b. ~% ~# c3 t
第3次:7641 - 1467 = 6174
/ C2 ^! u# G5 P经过了3次最大减最小的动作
' D8 w$ N. x4 k% S, v4 `/ @0 w
请输入一个互不相同的四位数:6915
0 g6 b& }1 E. R: h, y输入的四位数是:69157 `: U% d5 e! K
第1次:9651 - 1569 = 8082
; ~1 E" P( W8 J第2次:8820 - 288 = 85327 w5 G1 o$ p4 f# v% K! O
第3次:8532 - 2358 = 6174
& E' c; x- K9 `: w1 S) R) a经过了3次最大减最小的动作
1 G# a3 q  y; `7 ?
请输入一个互不相同的四位数:90732 r; B  R, x& Z' l
输入的四位数是:9073
% f, R/ G1 D  O7 M% ^( c第1次:9730 - 379 = 9351
9 Y' Z, F( B+ p6 O5 i/ F第2次:9531 - 1359 = 8172
+ Q& M# }0 C0 K第3次:8721 - 1278 = 7443
" o! ~9 o, L, d第4次:7443 - 3447 = 39967 T8 D1 w& S& P* f" X8 c" J
第5次:9963 - 3699 = 6264$ z. X3 S' P  W) \
第6次:6642 - 2466 = 4176
0 m8 A) B  V2 o6 U2 }1 r- v2 p第7次:7641 - 1467 = 6174
! n1 {, Z% z+ C" e7 u! T4 Q经过了7次最大减最小的动作
2 @! }* z- Z$ N' g6 i3 ?& }
请输入一个互不相同的四位数:52879 Y# \6 O6 j5 T  Z
输入的四位数是:5287- x3 O6 h/ @) c/ w4 j( P: a
第1次:8752 - 2578 = 6174
6 {- R" Y( o8 Q! o4 P4 Z经过了1次最大减最小的动作* }9 g; O" h* ?. I/ k

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

代码实现#include <stdio.h>
2 \% r5 d& V5 X- W+ Q  \5 ?" R
' R# t. y+ V  I" N$ wint convert(int number[],int ans);2 h' X( \% W4 l! a9 r, p+ S
int *sort(int number[],int len);. ]4 b' ]6 l/ p9 _% z5 X

0 B: v: d' @2 c& p$ mint main(void)
1 q8 B, ^# ~! i- b+ L{: t* R: a8 X8 B) v( n  A! I- ^
    int number[4] = {0};1 `( L) D9 k/ g' I' m* h8 o4 I& b
    int *p = NULL;
$ \9 {( q( d) R. T2 o& S: N8 Q' a    int n = 0;3 l3 N- w' [2 Y6 l" }4 R
    int ans = 0;
" W7 I5 I  x& v9 G% ~( Z    int count = 0;0 o  _; M4 M5 i6 @6 g/ `& j6 ^
    printf("请输入一个互不相同的四位数:");7 g0 L! K0 O- n0 m: G
    scanf("%d",&n);
7 b* y+ x1 c6 S  [    printf("输入的四位数是:%d\n",n);( Z, i0 w9 \0 V: Y3 _. l
    ans = n;
" Q6 |# z# I% j2 E- p7 F) B    while(ans!=6174)8 F; t7 g3 C4 Y$ \" F9 [2 W$ s0 x" [5 o
    {
- }) _3 M; Z5 b$ S% q        ans = convert(number,ans);1 g; b; G9 z2 y, _
        printf("第%d次:%d\n",count+1,ans);, e* _7 {2 f# {( t" A
        ++count;; K% I2 }) v4 |
    }
- N) [5 Q3 U! q3 \) ]' l    printf("经过了%d次最大减最小的动作\n",count);
: _& J" x2 n5 z# }1 h    return 0;+ o* e' P! w& b6 q- M
}
* g8 L& T0 \) C
% }9 {2 h+ S* B( O+ z: g8 ~5 mint *sort(int number[],int len) //大到小的排序4 g6 B, u% r+ ]* R% S5 N! r5 v
{
" d4 ?( z3 n; s6 F    int a =0;# `- b. Q3 a+ w- C0 V7 w$ x* t
    for(int i=0; i<len; ++i)! P3 r6 j/ X  E& ?, }  ~* c) T
    {: h3 ]6 |! s# H( h4 ?
        for(int j=i+1;j<len;++j)* R  a$ |5 Z2 z/ }( p/ e( {
        {
5 U. A0 X5 V2 O            if(number <number[j])6 m; u- Y' ]% V5 z+ Y0 ]5 P
            {
+ `7 i! u1 D8 z# O) P* ~6 F                a = number;
$ D, j2 S9 l$ ^. ^8 _+ a4 z( `                number = number[j];
& D! c/ }/ r# E# t  B0 P$ q                number[j] = a;
& l/ ~3 P* a! \8 p4 u  u            }
5 e. [/ N% g" y        }3 J+ \* y" U- U0 V
    }
! L' n3 o$ p2 [  n/ H/ I2 [! i    return number;
) m2 [( c7 [0 o) W  w7 s' o6 d}
6 i6 S$ S8 X( H' uint convert(int number[],int ans)//每次变换得到的数字
7 E2 `% m- }5 v# o1 o- Z4 {{- n' {3 M$ o- N% E
    int *p = NULL;
' I, \1 \: n# X' n2 h3 U6 F    int m=0;4 ~1 `; Q% S& B
    number[0] = ans/1000;  //把这个数放入数组1 w( |/ D. v2 T$ U) I2 f+ j
    number[1] = ans%1000/100;
* [/ p# n" f: R1 R    number[2] = ans%100/10;# T! J4 b2 q9 P& l0 ?
    number[3] = ans%10;/ ~3 M$ N$ S9 C( {/ n4 I
    p = sort(number,4);
; T  ?7 g7 T: H9 V    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字7 o1 g. _7 U; o- T3 l
    return m;
$ e9 m" x! ~2 Q/ H# g  i2 E}
* f- n$ X: I. X7 E8 }
运行结果: 微信图片_20201204213952.png $ m) m# Q# M, u( F) K* F" Q5 {+ z

3 p1 i9 P# T+ a+ i+ F0 `+ h6 S
收藏 评论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 手机版