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

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

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

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

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

请输入一个互不相同的四位数:3758
2 z( N) A8 U' E$ w) y* o+ u输入的四位数是:3758; X  {  p* q3 o# l1 `- Q
第1次:8753 - 3578 = 5175
; m) K: H; j6 D9 E4 t* \# g第2次:7551 - 1557 = 5994* ~- |1 e+ l1 Z% p
第3次:9954 - 4599 = 5355
3 w* c/ D* n* v+ u) P" E第4次:5553 - 3555 = 1998
  G! g; g$ ^: l8 b1 i& l. u+ e第5次:9981 - 1899 = 80820 {7 {  R/ q' T! B7 I+ G3 O: g. y
第6次:8820 - 288 = 8532
) W. ?) @* W- Z第7次:8532 - 2358 = 61746 w4 p8 A8 a  E1 _
经过了7次最大减最小的动作4 P! O, D$ N$ @
请输入一个互不相同的四位数:2517& g) U6 y$ [1 P  H0 e
输入的四位数是:25176 K0 A! a; U: m4 U5 q
第1次:7521 - 1257 = 6264
/ G- M; M0 f( f$ @- _- I第2次:6642 - 2466 = 4176) z9 s" o% M9 d2 }; `' K
第3次:7641 - 1467 = 6174
9 L4 m/ a3 }" t$ D! V+ O2 d经过了3次最大减最小的动作
4 Y8 w, X& Y2 s( c& f- q0 N  N
请输入一个互不相同的四位数:6915
7 R$ S/ b* F% p/ \. s1 N输入的四位数是:69158 O, G1 p  E3 }4 R& w8 p$ w# G: M" e
第1次:9651 - 1569 = 80823 ^+ I/ l7 K: M, [* w
第2次:8820 - 288 = 85322 o- e% w8 G1 k& }
第3次:8532 - 2358 = 6174
. {/ d9 K8 s9 k  I" ]1 U- L& B经过了3次最大减最小的动作
2 p& A- N0 s- Y1 G9 J$ M
请输入一个互不相同的四位数:90739 y( f( W. \3 }9 z) o
输入的四位数是:9073
1 m5 D) `9 J7 O' h, n9 M第1次:9730 - 379 = 9351! D  r3 {3 w9 q! q+ ~. `
第2次:9531 - 1359 = 8172
6 v$ v! u% y6 K# S9 x8 @8 X第3次:8721 - 1278 = 7443
5 E" Z$ }; E  E' n第4次:7443 - 3447 = 3996
  Z* L) M$ `8 z( Y第5次:9963 - 3699 = 6264% w( ^. w/ E. l6 S4 i# N
第6次:6642 - 2466 = 4176( d! x1 K  o1 x; E. {  f
第7次:7641 - 1467 = 6174  K' G, |8 Q9 K. i. \
经过了7次最大减最小的动作& e( J8 p  }, R
请输入一个互不相同的四位数:5287" v5 e- [. L, _8 c/ X9 M$ w: h$ j
输入的四位数是:5287( [0 V  S! ]8 }; z/ e$ ?6 H, t
第1次:8752 - 2578 = 61743 s5 \1 y- T. G0 D9 i& H
经过了1次最大减最小的动作
( }4 m' y/ `( L- O

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

代码实现#include <stdio.h>9 ~5 T& l9 {2 v; [/ Q

9 r% p* ]2 t1 O4 B" x$ X6 lint convert(int number[],int ans);
4 {* a! ~* K$ V, r, Y' _int *sort(int number[],int len);+ z0 X' Z* W* G9 A' q
. h: ?' G# Q! G
int main(void), W0 t; a( S) Q
{
3 x* t  {3 r( h" V2 _. Y    int number[4] = {0};8 s9 c2 i" x* J! @; G/ C
    int *p = NULL;
1 j3 e* z5 W, O8 E9 w    int n = 0;
8 ?  V/ [, ?* Q' \    int ans = 0;
, g( e! ^" g9 u' @, {    int count = 0;
( {! W$ k  l0 x5 m7 z' h0 x7 x% q    printf("请输入一个互不相同的四位数:");
  u/ u  v+ W; d% [' `/ q' W" G    scanf("%d",&n);
7 o1 n- W. N9 K' [" y    printf("输入的四位数是:%d\n",n);% }# _5 S* @2 P1 m4 g# M. L
    ans = n;
2 v+ u! G& [- E6 {2 q7 l* u) i3 k8 ?5 E    while(ans!=6174)! t) O  j% E; W" Z# b
    {0 m  G& e3 ^) C
        ans = convert(number,ans);
. M/ ^/ N8 }! \) U+ ?1 s        printf("第%d次:%d\n",count+1,ans);0 @# e6 S% x7 U* I' c
        ++count;
* @  J) N9 V. C" {# [2 G9 {9 e    }' n9 q" c& {: ]: G4 ~! ~
    printf("经过了%d次最大减最小的动作\n",count);6 ?0 Y* a! `1 T2 N
    return 0;
: J1 O% ^; V2 b; N* ]- c, H3 [5 B}
- O% M: F- S' _% i0 @2 f7 f4 V4 [9 V3 Z+ l
int *sort(int number[],int len) //大到小的排序
  z% l6 M: }+ O6 d2 y2 Q; O{' z' w1 U$ }( N8 Q1 }0 |/ J
    int a =0;
( i8 c3 N0 [0 c4 r* D    for(int i=0; i<len; ++i)
3 L5 w7 _: }& a% R4 R- x9 H    {. P1 Y3 ]3 Y2 f; U9 |$ d
        for(int j=i+1;j<len;++j)
1 |& C/ w" R1 a$ m" z6 ~6 e2 X) U        {
+ N) ~* _# x# j7 e# l/ t: S            if(number <number[j])
4 ]7 E. u1 N. O! T; l' D            {
- W  b9 F4 ~( p5 q: d                a = number;
2 q# v, f; c8 l4 z) Y6 l) v                number = number[j];
* h0 G# L$ T8 h9 z, [# e6 h                number[j] = a;
% |5 }8 O' S  f* ?" h            }
' ?: i" Z0 W* a5 P. E8 P        }: o  p5 D1 c6 A) Y
    }7 t6 R& E5 v4 W4 t; t
    return number;
2 I/ p6 {" b8 z  A' x( e' y& t}7 E4 E2 O' f! [# N; d! g4 G0 `/ ]
int convert(int number[],int ans)//每次变换得到的数字
* T( h2 o- O* q9 E{
7 |7 h- t9 j$ E8 b, g8 T/ ]# k" \    int *p = NULL;
& s- }% D1 o2 U: E5 c* W/ {# o    int m=0;
" N3 S% q3 s# ?- M/ r    number[0] = ans/1000;  //把这个数放入数组
  c1 E9 \; F5 C1 q' E    number[1] = ans%1000/100;+ K! g0 v/ u2 Y6 }+ i
    number[2] = ans%100/10;
( x3 i, C+ J/ R% W9 G5 |  n    number[3] = ans%10;
4 F7 d/ t  }2 F, {% K  c7 h    p = sort(number,4);* d. y0 c- A7 o6 q& R6 p- |
    m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字7 V  G! v5 ^# m: V( L/ R* d1 J
    return m;
8 Q/ \- p6 L1 x' C+ ?# W# ]4 B}
" u$ p9 m) U( ^: E4 F/ S
运行结果: 微信图片_20201204213952.png : q0 V8 K7 d  n8 o2 ?/ _" n

( P. H& F! o* N
赞 收藏 评论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 手机版