官术网_书友最值得收藏!

1.2 倍和數與倍積數

本節介紹涉及自身數字構成的另一類新穎整數:優美倍和數與倍積數。

這類整數的“優美”是指其組成數字不重復,“和”是指組成該數的各數字之和,“積”是指組成該數的各數字之積。

1.2.1 優美倍和數

定義:由n個互不相同的數字(可含數字0)組成的n位整數x若是其n個數字之和s的整數m倍,即有

x=m×s

則稱整數x為n位優美倍和數,整數m為對應的倍數。

例如,上面求得的水仙花數407的3個數字之和為11,407=37×11,407就是一個3位優美倍和數,37為相應倍數。

【問題1】 試求3位優美倍和數的倍數m的最大值。

【思考】 以m的表達式為依據,逐個數字試驗探求。

設3位優美倍和數x的3個互不相同數字為a,b,c,即x=100a+10b+c,s=a+b+c,則

由表達式看,分母中a,b,c是平等的,但分子就不一樣了,相差很大。

基本思路:求取倍數m最大時,通常取a>b>c,當然以x能被s整除為前提。若x不能被s整除,則通常在較小的數字b,c中局部調整。

據式(1),要使m最大,在x能被s整除的前提下,取c盡可能小,不妨取c=0,則

據式(2),對任何a取值,要使m最大,b盡可能取最小,不妨取b=1,即有

據式(3),要使m最大,a可取最大9,此時m=91。

若取0<c≤9,可知m<91。

因而得:倍數m最大的3位優美倍和數為910,其相應的最大倍數為91。

【問題2】 探求3位優美倍和數的倍數m的最小值。

【思考】 同樣以m的表達式為依據,逐個數字試驗探求。

為求取倍數m的最小值,通常取a<b<c,同樣以x能被s整除為前提。若x不能被s整除,則在數字b,c中局部調整。

據式(1),取a=1,即有

由上式可知要使m最小,c應取最大,因而c從9開始遞減取值。

若取c=9,則,無論b取何值,m非整數,不符合要求。

若取c=8,則,要使m為整數,取b=9,得m=11;或取b=0,得m=12。

因而可得:a=1時,取x=198得m=11為最小。

據式(1),取a=2,有

由上式可知要使m最小,c盡可能取最大,因而c從9開始遞減取值。

若取c=9,則,要使m為整數,則取b=0,得m=19,顯然大于11。

若取c=8,則,要使m為整數,則取b=2(與a相同,舍去)或b=8(與c相同,舍去)。

若取c=7,則,要使m為整數,則取b=4,得m=19,顯然大于11。

依此a逐一遞增取值,得m均大于11。

因而得:倍數m最小的3位優美倍和數為x=198,其相應的最小倍數為m=11。

【拓展】 探索n位優美倍和數及其倍數m的最大值與最小值。

輸入正整數n(2≤n≤9),統計n位優美倍和數的個數,求出倍數m的最大值與最小值,并輸出對應m最大與最小時的n位優美倍和數。

1. 設計要點

(1)枚舉與分離數字。首先通過循環求出n位沒有重復數字的最小與最大整數a,b,然后設置x(a~b)循環枚舉n位整數;然后對每一個n位整數x應用整除/與取余%操作,分離x的n個數字k;最后通過求和s+=k;得到x的n個數字和s。

(2)統計與判別。應用f數組f[k]++;統計數字k的頻數,以便排除各數字k存在相等的情形;然后判別x能否被s整除:若x能被s整除,則產生一個n位優美倍和數x及其倍數m=x/s,用變量i統計優美倍和數個數。

(3)比較求最值。通過比較求取倍數m的最大值max與最小值min,并分別記錄m最大、最小時的x與s的值,為輸出m最大與最小時的優美倍和數提供數據。

2. 探求程序設計
3. 程序運行示例與變通
     請輸入位數n(2≤n≤9):4
     4位優美倍和數共645個。
     倍數m最大為760:9120=760×12
     倍數m最小為61:1098=61×18

如果輸入n=3,即可得3位優美倍和數的個數及它們的倍數的最大值與最小值。

當n比較大時,例如n=8,9,程序的運行相應變慢。建議通過輸入不同整數n值運行程序,具體感受枚舉時間的差異。

變通:把組成數字排除0,保留n個數字互不相同,即組成n位整數的n個數字限定為互不相同的正數。

在以上搜索程序中測試整數x是否有重復數字時還需測試n個數字是否含0,即把程序中的測試條件進行以下改變:f[k]>1改為f[k]>1||f[0]>0。這一變通,可得n位不含0的優美倍和數的相應結果。例如,當n=4時,程序運行結果如下所示。

     請輸入位數n(2≤n≤9):4
     4位優美倍和數共322個。
     倍數m最大為534:9612=534×18
     倍數m最小為71:1278=71×18

1.2.2 優美倍積數

定義:由n個互不相同的非零數字組成的n位整數x若是其n個數字之積t的整數m倍,即有

x=m×t

則稱整數x為n位優美倍積數,整數m為對應的倍數。

例如,3276的4個數字之積為252,3276=13×252,3276就是一個4位優美倍積數,13為對應倍數。

輸入正整數n(2≤n≤9),探求n位優美倍積數的個數,及n位優美倍積數的倍數m的最大值與最小值,并輸出倍數m最大與最小時對應的n位優美倍積數。

對于某些n,若沒有相應的n位優美倍積數,則予以指出。

1. 編程設計要點

(1)枚舉與分離。首先求出n位沒有重復非零數字的最小與最大整數a,b,然后設置x(a~b)循環枚舉n位整數;對每一個n位整數x應用整除/與取余%操作,分解x的n個數字k;通過求積t?=k;得到x的n個數字之積t。

(2)統計與判別。對每一整數應用f數組f[k]++;統計數字k的頻數,以排除各數字k存在相等(f[k]>1)的情形;然后判別x能否被t整除:若x能被t整除,則產生一個n位優美倍積數x及其倍數m=x/t,用變量i統計優美倍積數個數。

(3)比較求最值。通過比較求取倍數m的最大值max與最小值min,并分別記錄m最大、最小時的x與t的值,為輸出m最大與最小時的優美倍積數提供數據。

2. 探求n位優美倍積數程序設計
3. 程序運行示例與說明
     請輸入位數n(2≤n≤9):5
     5位優美倍積數共9個。
     倍數m最大為167:64128=167×384
     倍數m最小為19:12768=19×672

請修改程序,輸出指定n位所有優美倍積數。

這里引申出一個新的問題:對于指定的位數n,是否存在n位優美倍和同時倍積的整數?

4. 引申探求n位優美倍和積數

定義:如果n位整數x是優美倍和數,也是優美倍積數,則稱x為n位優美倍和積數。

例如,3位整數216,其數字之和為9,216=24×9;同時其數字之積為12,216=18×12;可見216就是一個3位優美倍和積數。

試修改以上程序,搜索并輸出指定n位所有優美倍和積數。

修改:

(1)增加統計數字和變量s,以及數字和的倍數j。

(2)求數字積時,同時求數字和:t?=k;s+=k;(s需先清零)

(3)判別數字積的倍數,同時判別數字和的倍數:(x%t==0&&x%s==0)

(4)計算數字積的倍數,同時計算數字和的倍數:m=x/t;j=x/s;

(5)修改輸出語句,并刪除有關最大最小操作。

例如,指定n=5時,程序運行結果如下所示。

     請輸入位數n(2≤n≤9):5
     1:12768=532×24,12768=19×672
     2:13248=736×18,13248=69×192
     3:13824=768×18,13824=72×192
     4:18432=1024×18,18432=96×192
     5:61824=2944×21,61824=161×384
     5位優美倍和積數共5個。

顯然,以上輸出的5個5位優美倍和積數是上面9個5位優美倍積數的一個子集。其中,第2,3,4個優美倍和積數都是由1,2,3,4,8通過不同排列組成的5位數,以后將其稱為“變序數”。

主站蜘蛛池模板: 德令哈市| 衡东县| 大同县| 明星| 友谊县| 都江堰市| 汨罗市| 积石山| 北京市| 凤阳县| 东至县| 屏南县| 霍城县| 蒙城县| 松溪县| 汉川市| 孝义市| 新兴县| 东乡族自治县| 胶州市| 临朐县| 泸溪县| 岳池县| 佛坪县| 吴忠市| 高陵县| 晋中市| 浑源县| 宜丰县| 平武县| 乐平市| 揭东县| 鄂州市| 河源市| 辽阳市| 汉中市| 鱼台县| 比如县| 南溪县| 鸡东县| 禄丰县|