任选4个不完全相同的数字(像1111就不行),让“最大排列”减“最小排列”(例如8753-3578),不断重复这个动作,最后一定会得到相同的结果:6174。神奇的是:这个“最大减最小”的动作,最多不会超过7次! 我们先来看看五组实验结果 请输入一个互不相同的四位数:3758输入的四位数是:3758 第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 第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次最大减最小的动作 请输入一个互不相同的四位数:6915" |& f9 ^3 ~/ ?0 N 输入的四位数是:69150 T" H- b/ A8 a3 }5 S) { 第1次:9651 - 1569 = 8082 第2次:8820 - 288 = 8532 第3次:8532 - 2358 = 6174 经过了3次最大减最小的动作 请输入一个互不相同的四位数:9073, @/ F4 ]' ^+ T2 v! j 输入的四位数是:9073 第1次:9730 - 379 = 93510 ?0 Z' }+ G7 Q2 s 第2次:9531 - 1359 = 8172 第3次:8721 - 1278 = 7443/ P: m# Y9 ^5 X7 ^9 H5 X; v 第4次:7443 - 3447 = 3996 第5次:9963 - 3699 = 62645 K1 a0 B/ X, V1 f) n6 p 第6次:6642 - 2466 = 4176 第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次最大减最小的动作 接下来我们用C语言代码进行验证,代码实现如下。 代码实现#include <stdio.h>. I$ `+ \6 @/ n int convert(int number[],int ans); int *sort(int number[],int len);" n9 q( _# e( T7 F( _( y7 |. ^) @ ) ]% ]& j% r' f int main(void) {) 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("请输入一个互不相同的四位数:"); scanf("%d",&n);+ `% O1 }. |( a6 S7 \4 z printf("输入的四位数是:%d\n",n); ans = n; while(ans!=6174)' l% }, Y6 `) c4 V' W { ans = convert(number,ans); printf("第%d次:%d\n",count+1,ans); ++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 int *sort(int number[],int len) //大到小的排序 {; g( I: J5 O* I+ O- F$ Q int a =0; 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) { z6 z1 H( k( V; G; ?( C0 b if(number <number[j]) {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; number[0] = ans/1000; //把这个数放入数组 number[1] = ans%1000/100; number[2] = ans%100/10;+ N* s- J$ R5 k9 Q; N# } number[3] = ans%10; 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);//最大数字减去最小数字 return m;, A9 W$ J9 a. u! K4 n } 运行结果: |
这是什么原理? |
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
【源码】STLINK-V3MINI 高速USB仿真器,成功改刷【高速CMSIS-DAP】
在线直播|无需编写任何代码即可在STM32上实现USB-C Power Delivery
STM32 USB CDC 虚拟多串口
最全USB HID开发资料,悉心整理一个月,亲自测试
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
USB Audio设计与实现
【MCU实战经验】+STM32F107的USB使用
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32 USB-HID通信移植步骤STM32 USB HID键盘例程