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

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

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

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

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

请输入一个互不相同的四位数:3758
" x2 y  q+ o& e输入的四位数是:3758
! {: J# ~4 @* ~第1次:8753 - 3578 = 51751 m( g- b0 O# U& t( m7 y
第2次:7551 - 1557 = 5994' _( m. Y, I! I
第3次:9954 - 4599 = 53553 F! b: v8 z5 f. g7 A( b9 y# J7 N
第4次:5553 - 3555 = 1998* m( m) e* D2 s1 J: D9 i
第5次:9981 - 1899 = 8082& L  R$ B9 @( }* M. G
第6次:8820 - 288 = 8532
) r6 Y( F$ c) R& E- y- M第7次:8532 - 2358 = 61740 l* c8 g+ D& c- w) [
经过了7次最大减最小的动作) k/ v0 w& u0 z, A) ]! S7 p
请输入一个互不相同的四位数:2517: }9 V. J. [4 O1 @1 ~, ?
输入的四位数是:2517! f5 `0 p: d+ M" ?( I( L
第1次:7521 - 1257 = 6264  H4 H) K3 m6 X8 d7 F4 H
第2次:6642 - 2466 = 4176$ G3 N$ Z9 [  P2 Q  C0 R. `/ _
第3次:7641 - 1467 = 6174* m6 \+ ~4 q* i5 @+ j" n; |2 X
经过了3次最大减最小的动作
) W3 O1 t6 u; C2 s3 V0 K
请输入一个互不相同的四位数:6915" |& f9 ^3 ~/ ?0 N
输入的四位数是:69150 T" H- b/ A8 a3 }5 S) {
第1次:9651 - 1569 = 8082
6 S9 `8 A% I( ?1 {5 W% Z第2次:8820 - 288 = 8532
! V8 U/ N2 j. b; d$ S! u0 o5 F第3次:8532 - 2358 = 6174
, ]$ k1 z5 U( B$ T' ?$ r7 }9 R: P经过了3次最大减最小的动作
, Y& `' {5 n4 p  ?) |4 }% l% T
请输入一个互不相同的四位数:9073, @/ F4 ]' ^+ T2 v! j
输入的四位数是:9073
5 `. u) O8 s- W. P0 X第1次:9730 - 379 = 93510 ?0 Z' }+ G7 Q2 s
第2次:9531 - 1359 = 8172
  S- s) b% z6 C, M  M/ N( K- ?第3次:8721 - 1278 = 7443/ P: m# Y9 ^5 X7 ^9 H5 X; v
第4次:7443 - 3447 = 3996
# Z9 Q! r  m$ Q' t% `* u第5次:9963 - 3699 = 62645 K1 a0 B/ X, V1 f) n6 p
第6次:6642 - 2466 = 4176
& Z0 B: t4 G5 C9 B+ l6 H3 D2 b第7次:7641 - 1467 = 6174: e$ K: K, r. ^1 o0 B8 o) ?/ @
经过了7次最大减最小的动作  e& G0 c3 X5 v0 r' D0 g
请输入一个互不相同的四位数:5287; ^  D1 l9 B5 u( {- p( r9 C' q
输入的四位数是:52875 u) i# ?' |5 i1 C
第1次:8752 - 2578 = 61745 K' d8 C" S5 F0 f- o
经过了1次最大减最小的动作
$ s) g  f" p  j; L/ O7 P

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

代码实现#include <stdio.h>
' V9 A( _3 o, `3 F+ T) s, r. I$ `+ \6 @/ n
int convert(int number[],int ans);
. A( J) j3 A! ^int *sort(int number[],int len);" n9 q( _# e( T7 F( _( y7 |. ^) @
) ]% ]& j% r' f
int main(void)
- G  X+ I& r( N/ S6 m{) l$ ~0 v7 A2 R- k$ A' c
    int number[4] = {0};  Y6 r6 U+ A/ w- t' {
    int *p = NULL;- z) R0 D' C& ]$ p: a
    int n = 0;: f8 z8 ~& \, V
    int ans = 0;! w+ y7 I. Y4 j4 E% z8 F+ w: V' d
    int count = 0;  v% R& ~; E  j
    printf("请输入一个互不相同的四位数:");
& i: i# t2 i' q8 x2 j    scanf("%d",&n);+ `% O1 }. |( a6 S7 \4 z
    printf("输入的四位数是:%d\n",n);
4 t8 e. Z$ W2 o. {% O3 z    ans = n;
+ ]2 {: `) H& C1 ?    while(ans!=6174)' l% }, Y6 `) c4 V' W
    {
4 u7 c2 F: m( O0 D0 ~" N        ans = convert(number,ans);
& I. H! c- A$ v6 E; o7 W        printf("第%d次:%d\n",count+1,ans);
/ z$ i5 b* i& O! ?- B' C  [        ++count;  E2 E& _  A5 S% w: b6 }' c7 N
    }+ q5 t& j* ?5 Q' p' z
    printf("经过了%d次最大减最小的动作\n",count);9 u' [$ q) V' p& {9 G! U6 t. C2 o
    return 0;4 }) G% _6 }0 }7 M) J
}( j  r& c( w2 _# C

; h6 {$ O8 f" ~% fint *sort(int number[],int len) //大到小的排序
( d6 W! W% h$ i{; g( I: J5 O* I+ O- F$ Q
    int a =0;
: O# x: R% c# o* R2 b    for(int i=0; i<len; ++i)- C2 @5 W6 t% f$ j3 P0 Z
    {& F1 s( {, c# O/ E: `5 L
        for(int j=i+1;j<len;++j)
' P. J/ z  {5 v2 m+ E( J" \% p        {  z6 z1 H( k( V; G; ?( C0 b
            if(number <number[j])
- w& o+ }) ?8 Q6 t) }7 y            {5 W' Z$ L: Q) G3 U$ b; v7 C
                a = number;! Q0 l; t+ j% T! E/ y
                number = number[j];' ]9 b4 T! E1 L5 k; L4 _0 w
                number[j] = a;9 ^7 L* A4 V+ Y7 O3 Y; H; h( P
            }( a+ ^% U  k2 ~( q5 Z3 H2 [1 ^( c
        }0 Y4 i* n7 v2 c. Z; k
    }' [9 T! ]4 }# p( ~3 f% d6 }1 n
    return number;6 v) w' X3 t( b5 ^
}# T; _& e9 U8 D1 z9 A
int convert(int number[],int ans)//每次变换得到的数字' h/ B# ]6 K; C( M9 d6 V  X
{/ H, S1 z! B4 Q; G* }, I
    int *p = NULL;  J8 l2 U9 L1 @) [+ f! C
    int m=0;
% j+ x! i; x  ?    number[0] = ans/1000;  //把这个数放入数组
  V0 i! p% `; M; }' E7 \0 \( F3 Q    number[1] = ans%1000/100;
2 L( a6 U0 R+ C  b% R2 C/ s    number[2] = ans%100/10;+ N* s- J$ R5 k9 Q; N# }
    number[3] = ans%10;
8 B3 |" D3 Z' C& j8 `$ N+ U4 i    p = sort(number,4);  B9 n9 h, h) z1 q9 c& h, \9 B0 s
    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字
% j; i# [: w4 j+ [" [    return m;, A9 W$ J9 a. u! K4 n
}
$ I: j6 n  i# Y) u( J
运行结果: 微信图片_20201204213952.png : y/ h1 i' K8 ~2 s/ H

( O, t% T9 p% K$ c& 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 手机版