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

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

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

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

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

请输入一个互不相同的四位数:3758# b. L* P2 P8 I( b. ?
输入的四位数是:37582 s" a( }( @4 K- h/ p3 W
第1次:8753 - 3578 = 5175  K8 C% ^1 |( f( V* k' `5 l% T
第2次:7551 - 1557 = 59942 p7 e9 c6 H) \* k
第3次:9954 - 4599 = 5355! {% i4 e9 K7 ?9 p, c$ g; M! N' H) n* S
第4次:5553 - 3555 = 1998" F! C1 N* b' |6 ^& |$ E
第5次:9981 - 1899 = 8082
5 ]7 v4 r+ }' z# p+ Y第6次:8820 - 288 = 8532) o8 P6 b. I: N+ n
第7次:8532 - 2358 = 6174& A! x2 N+ {( @3 i5 t# v* p
经过了7次最大减最小的动作% y, t# U/ X1 g# G- V/ E
请输入一个互不相同的四位数:2517: K4 E% ~9 b9 Q6 D
输入的四位数是:2517" y4 h- `) P7 O# E
第1次:7521 - 1257 = 6264; P6 w- r  \) o# L
第2次:6642 - 2466 = 4176
3 A6 w, n9 D' r$ O  r第3次:7641 - 1467 = 6174- Y8 n1 Q& N4 G2 o+ L- ]
经过了3次最大减最小的动作" f) U/ ]! s6 r& U5 v" h! }
请输入一个互不相同的四位数:6915* r; y6 \, H0 p
输入的四位数是:6915
/ p4 }' @5 ^6 Z0 h第1次:9651 - 1569 = 8082
1 V% e9 l5 Z# W第2次:8820 - 288 = 8532+ F1 [* {+ j$ t$ M5 I( Z) W
第3次:8532 - 2358 = 6174( g; F- @  q. D: J' v
经过了3次最大减最小的动作
% [0 K0 p/ M' q0 _5 `
请输入一个互不相同的四位数:9073
  \) j: v) L* t输入的四位数是:90739 Q, N- z# g0 d0 ?, G& |% @
第1次:9730 - 379 = 9351
) t+ j& `4 L9 E4 E; k第2次:9531 - 1359 = 8172
! Y1 U8 w1 _4 U! O# ~/ D, \第3次:8721 - 1278 = 74430 X3 k% D6 t7 b7 Y8 ?, p( ^' d( {3 K
第4次:7443 - 3447 = 3996
) e5 Z+ a. a, o8 K' {7 R4 r! q. q7 ~第5次:9963 - 3699 = 6264  N. t' O6 G* E6 Q# `
第6次:6642 - 2466 = 4176
+ L& A- ^$ b3 L7 s- ~0 w7 I第7次:7641 - 1467 = 61740 }5 ?: J+ ]" R7 a
经过了7次最大减最小的动作( m* N. X& i! u: U! o7 W* p
请输入一个互不相同的四位数:5287
6 H  b+ f: z: `8 h/ Z2 v3 E输入的四位数是:5287
6 k+ E2 k6 A* @第1次:8752 - 2578 = 6174
7 t2 N; N9 J8 i3 P; k* T' g% z经过了1次最大减最小的动作$ b$ g. n/ R  A0 W

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

代码实现#include <stdio.h>
% ?  f* z" s4 i, \9 d
4 J& B4 y3 i  D. `) vint convert(int number[],int ans);
* m5 U" x9 m( W# @$ Yint *sort(int number[],int len);, i. E4 j! G; ^: _0 S0 B" m$ W! M

0 E7 K1 U  I& D# U4 B/ J+ Mint main(void)4 E, ^# d. _1 R8 i# ~! H; r4 R
{4 j1 Y: a" y% N6 h
    int number[4] = {0};$ y1 V( I0 Y4 g) j2 Z2 O' s
    int *p = NULL;
0 a% {* X4 u2 r    int n = 0;$ G& e: C# y) |# H
    int ans = 0;
, G! m. Y1 b9 q) t, k    int count = 0;
' g. u( [8 Y9 Z8 L1 D3 b8 Z    printf("请输入一个互不相同的四位数:");, x3 o! r9 r; c. h' U; M1 A- M
    scanf("%d",&n);
" a; V6 q: i! ?    printf("输入的四位数是:%d\n",n);  S  |- G, a9 \+ _  D( {
    ans = n;* Y& o/ x5 b( E8 Y
    while(ans!=6174)( J' j% L1 I  \4 c7 B
    {, d$ a2 D" I2 u" ]7 L2 {
        ans = convert(number,ans);, V# \9 A. q2 y  o5 K; D$ u
        printf("第%d次:%d\n",count+1,ans);
- g1 E) @" f- t        ++count;
5 t) _6 P( T2 @; L; k6 O+ d1 Z/ r    }2 m  ?( O) {: D, E. U$ Y
    printf("经过了%d次最大减最小的动作\n",count);
) c9 I2 J3 R8 Y2 D9 c# \  y1 x2 D    return 0;6 P* |" ^9 V: ]" k( h' [0 r
}
, T5 g' }# r, s6 y# r  R5 n( C& o; F% o" l
int *sort(int number[],int len) //大到小的排序8 H, r( G! u" u) @9 E# t1 D
{% M) j' `/ ?! }! g
    int a =0;" w# J9 i  _  u/ p6 o6 ?0 A) `
    for(int i=0; i<len; ++i)
$ [8 V, p8 R7 i$ }    {1 n* U0 M1 J) y8 `
        for(int j=i+1;j<len;++j)
' R, ]3 \' d: @. Y        {
+ F0 @9 U  K# E            if(number <number[j])
) L( G" z; p8 _3 e7 ?& Y            {
3 ^/ P, }* o7 ~! r0 ?% i( w2 K! L                a = number;
% Q8 @0 K. t1 U4 ]                number = number[j];" I/ a$ W* S) a  G% c! u
                number[j] = a;& {% R! v) k. u+ G- J+ k/ P+ }% Y* h
            }
6 y( Y, H8 Q0 X5 |# c: J2 e        }
+ u8 k, ^) O! ]: N  D* x8 H    }- w- s  v. j, g/ R& ~* @# Z) x
    return number;
8 p  `7 P6 C5 g1 B; U* G; `}
+ A1 f: _) d1 L# Wint convert(int number[],int ans)//每次变换得到的数字
# ~- r5 Y" E  m" n7 r# L{5 i0 R, ?) j) V
    int *p = NULL;
9 {' d" p  W9 i. @    int m=0;3 e0 y/ C7 u8 _6 s1 z: [: V& G; H
    number[0] = ans/1000;  //把这个数放入数组
+ P7 c$ }) J8 A- [    number[1] = ans%1000/100;1 t6 t3 _. G" ~7 z" f2 n
    number[2] = ans%100/10;
$ P/ |9 x# ]/ D9 W. _5 X3 u    number[3] = ans%10;7 `$ j) u4 d6 o0 M7 N
    p = sort(number,4);
0 x; @' N& j! o5 ]6 t$ F, d* a    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字
8 u, ~1 O6 t2 P    return m;
# G8 b: O; C. h$ Y}
) X" Y, \1 `, I, T( Y
运行结果: 微信图片_20201204213952.png
4 |& f' L- x& o5 C8 H: l$ r! t
# l! [# b/ O& v5 t
收藏 评论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 手机版