100元换成10元5元1元纸币,每种至少一张,一共多少换法

作者&投稿:雪单 (若有异议请与网页底部的电邮联系)
100元换成10元5元1元纸币,每种至少一张,一共多少换法?~

先10元1张,5元可以1到17张,对应1元是已知数,共17种换法
10元2张,5元可以1到15张 共15种
10元3张 5元1到13张 共13种
10元4张 5元1到11张 共11种
……
10元9张 5元只能1张共1种
因此总换法有
17+15+13+11+9+7+5+3+1=81种

1、2、2、5、10、10、10、10、10、10、10、10、10
1、1、2、2、2、2、5、5、10、10、10、10、10、10、10、10、
1、1、1,2、5、10、10、10、10、10、10、10、10、10
1、1、1、1、2、2、2、5、5、10、10、10、10、10、10、10、10
1、1、1、1、1、2、2、2、2、2、5、10、10、10、10、10、10、10、10
、、、、、、、、、、、以下类推

81种换法
一 ,每种至少一张,实际应为至少10元、5元各一张,1元的5张。共20元,剩下的80元可任意分配。
二,80元的零钱可以如下:
8张10元。1种
7张10元,5元的2、1、0张(差额为1元,下同)。3种
6张10元,5元的4、3、2、1、0张。5种
5张10元,5元的6、5、4、3、2、1、0张。7种
......
1张10元,5元的14、13.....6、5、4、3、2、1、0张。15种
0张10元,5元的16、15、14、13.....6、5、4、3、2、1、0张。17种
三,总的换法为
1+3+5+.....+15+17=81种
看到这个题目的第一感觉就是一个三元一次方程的求解,编程的话,就是三个for循环外加个if判断,瞬间KO。对这个题目来说效率也是可以接受的。可是这根本没有体现出算法的优势。下面我们来仔细推敲下这里面隐藏的规律。



根据上图的规律,即可得到如下代码:

/**
* 1、求解特定实例:要将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法?
*
* @return
* @author chenchanghan
*/
public static int getDivideWays() {
int count = 0;
for (int i = 0, size = 100 / 10; i <= size; i++) {
// 针对10的每个场景,计算5的组合情况(即,从0个5 到 n( n=(100 - i * 10)/5
// )个5共n+1种情况
count += (100 - i * 10) / 5 + 1;
}
return count;
}

到这里,这个就算解完了,但是这里确实因为分解的元素中包含1,将问题变的简单化了,如果不是1、5、10而是随意的三个数字,改怎么解决呢?同样还是要找出规律来。

下面我们就来分析下10、5、3如何组合成100吧。

首先,0个10的情况下,5和3怎么组合成100呢?正好20*5=100,显然这是不存在10的情况下出现最多5的情况,那还有没有其他的组合情况呢?这时我们就要用到一个最小公倍数(3和5的最小公倍数是15),很显然,我们就可以将”3个5替换成5个3“了。因为最多20个5,所以我们可以继续用”3个5替换成5个3“,直到最后剩下2个5。综上0个10的情况下,5可以出现的次数分别为20、17、14、11、8、5、2,所以该场景下共有7中组合方式。

其次,1个10的情况下,5和3怎么组合成100呢?我们还是从5来出发,5*18=90,1个10的情况下,组合成100,最多可以出现18次,同理还是用”3个5替换成5个3“。最终1个10的情况下,5可以出现的次数分别为18、15、12、9、6、3、0。该场景下也有7种组合方式。

同理,依次分析下去。

根据上面的规律,得出代码如下:


/**
* 2、组合元素一般化:将total元兑换为large元、middle元、small元的零钱,请问有多少种兑换方法?
*
* @param total
* @param large
* @param middle
* @param small
* @return
* @author chenchanghan
*/
public static int getDivideWays(int total, int large, int middle, int small) {
if (total > 0 && small > 0 && middle > small && large > middle) {
int count = 0;
int LCM = getLeastCommonMutiple(middle, small);
int substituteUnit = LCM / middle;
for (int i = 0, size = total / large; i <= size; i++) {
int restTotal = total - i * large;
if (restTotal > 0) {
// actualMaxMiddleNum>=0,表示restTotal正好可以有x个middle和y个small拼凑起来(x、y是大于等于0的整数)
int actualMaxMiddleNum = getActualMaxMiddleNum(restTotal, middle, small);
if (actualMaxMiddleNum >= substituteUnit) {
// actualMaxMiddleNum >=substituteUnit,表示可以将substituteUnit个middle替换成LCM/small个small
// 可以换多少次呢?显然可以换0、1...actualMaxMiddleNum/substituteUnit,即:actualMaxMiddleNum/substituteUnit+1
count += actualMaxMiddleNum / substituteUnit + 1;
} else if (actualMaxMiddleNum >= 0) {
// 0<=actualMaxMiddleNum// 因为count++;
}
} else {
// 正好被large完美匹配了
count++;
}
}
return count;
} else {
throw new IllegalArgumentException();
}
}

/**
* 获得方程:x*middle + y*small = restTotal 中x最大的取值。
*
* @param restTotal
* @param middle
* @param small
* @return
* @author chenchanghan
*/
private static int getActualMaxMiddleNum(int restTotal, int middle, int small) {
int modMiddle = restTotal % middle;
int maxMiddleNum = restTotal / middle;
int actualMaxMiddleNum = -1;
if (modMiddle == 0 || modMiddle == small) {
actualMaxMiddleNum = maxMiddleNum;
} else {
// 无法使用最大数量(即:maxMiddleNum)的middle和small组合成restTotal,
// 则需要逐步减少middle的个数,进而增加small的个数,来尝试组合成restTotal。
int minusMiddleNum = getMinusMiddleNum(middle, small, modMiddle, maxMiddleNum);
if (minusMiddleNum > 0) {
// 表示可以形成一个拥有最大middle数的组合,即: (maxMiddleNum - minusMiddleNum)*middle + y*small = restTotal ;
actualMaxMiddleNum = maxMiddleNum - minusMiddleNum;
} else {
// middle和small无论怎么组合都无法拼凑成restTotal,即:x*middle + y*small = restTotal 的整数解不存在
actualMaxMiddleNum = -1;
}
}
return actualMaxMiddleNum;
}

/**
*
* @param middle
* @param small
* @param modMiddle
* @param maxMiddleNum
* @return
* @author chenchanghan
*/
private static int getMinusMiddleNum(int middle, int small, int modMiddle, int maxMiddleNum) {
int minusMiddleNum = -1;
for (int i = 1; i <= maxMiddleNum; i++) {
if ((middle * i + modMiddle) % small == 0) {
minusMiddleNum = i;
break;
}
}
return minusMiddleNum;
}

/**
* 求两个数的最小公倍数。
*
* @param middle
* @param small
* @return
* @author chenchanghan
*/
private static int getLeastCommonMutiple(int m, int n) {
return m * n / getGreatestDivisor(m, n);
}

/**
* 求两个数的最大公约数。
*
* @param m
* @param n
* @return
* @author chenchanghan
*/
private static int getGreatestDivisor(int m, int n) {
int tmp = 0;
if (m < n) {
tmp = m;
m = n;
n = tmp;
}
while ((tmp = m % n) != 0) {
m = n;
n = tmp;
}
return n;
}



我们再来推广下,将分解的元素变成3个以上,具体见如下代码:

/**
* 3、元素个数一般化:将total元兑换为a元、b元、c元、....的零钱,请问有多少种兑换方法?
*
* @param total
* @param elements
* @return
* @author chenchanghan
*/
public static int getDivideWays(int total,int[] elements){
if(elements!=null && elements.length>=3){
int count = 0 ;
if(elements.length == 3){
count += getDivideWays(total,elements[0],elements[1],elements[2]);
}else{
int large = elements[0];
int[] subElements = new int[elements.length-1];
System.arraycopy(elements, 1, subElements, 0, subElements.length);
for (int i = 0, size = total / large; i <= size; i++) {
int restTotal = total - i * large;
if (restTotal != 0) {
count += getDivideWays(restTotal, subElements);
} else {
count++;
}
}
}
return count ;
}else{
throw new IllegalArgumentException();
}
}

81种换法
一 ,每种至少一张,实际应为至少10元、5元各一张,1元的5张。共20元,剩下的80元可任意分配。
二,80元的零钱可以如下:
8张10元。1种
7张10元,5元的2、1、0张(差额为1元,下同)。3种
6张10元,5元的4、3、2、1、0张。5种
5张10元,5元的6、5、4、3、2、1、0张。7种
......
1张10元,5元的14、13.....6、5、4、3、2、1、0张。15种
0张10元,5元的16、15、14、13.....6、5、4、3、2、1、0张。17种
三,总的换法为1+3+5+.....+15+17=81种。

拓展资料
各国货币单位
1、中国货币(元)
中华人民共和国的法定货币是人民币,中国人民银行是国家管理人民币的主管机关,负责人民币的设计、印制和发行。人民币的单位为元,人民币的辅币单位为角、分。1元等于10角,1角等于10分。人民币符号为元的拼音首字母大写Y加上两横即“¥”

2、英国货币(英镑)
英镑是英国国家货币和货币单位名称。英镑主要由英格兰银行发行,但亦有其他发行机构。最常用于表示英镑的符号是£。国际标准化组织为英镑取的ISO 4217货币代码为GBP(Great Britain Pound)。除了英国,英国海外领地的货币也以镑作为单位,与英镑的汇率固定为1:1。

3、美国货币(美元)
美元(United States dollar 货币缩写:USD;ISO 4217货币代码:USD;符号:USA$)是美利坚合众国的法定货币。目前流通的美元纸币是自1929年以来发行的各版钞票。

4、泰国货币(泰铢)
泰铢(ISO 4217码:THB)是泰国官方货币,由泰中央银行泰国银行发行,1铢等于100萨当(satang)。自第9序列至第16序列泰铢每种纸币、铸币的正面均印有、铸有泰王拉玛九世普密蓬.阿杜德头像。自2018年4月6日起,发行第17序列泰铢,纸币、硬币均改为泰王拉玛十世玛哈.哇集拉隆功头像。

5、俄罗斯货币(卢布)
卢布,符号: _(原符号Rbs. Rbl)。货币代码:RUB。使用地区:俄罗斯以及自行宣布独立的阿布哈兹及南奥塞梯。通胀率:7%,俄罗斯卢布(Рублевка)是俄罗斯的本位货币单位。辅币是戈比(Копейка)。1卢布=100戈比。

81种换法
一 ,每种至少一张,实际应为至少10元、5元各一张,1元的5张。共20元,剩下的80元可任意分配。
二,80元的零钱可以如下:
8张10元。1种
7张10元,5元的2、1、0张(差额为1元,下同)。3种
6张10元,5元的4、3、2、1、0张。5种
5张10元,5元的6、5、4、3、2、1、0张。7种
......
1张10元,5元的14、13.....6、5、4、3、2、1、0张。15种
0张10元,5元的16、15、14、13.....6、5、4、3、2、1、0张。17种
三,总的换法为
1+3+5+.....+15+17=81种

很多啊!


题目:把一张百元整钞兑换成面值为1角、5角、1元、5元、10元、20元、50...
排列组合可得共有;1+7+7+21+21+35+35=127种 谢谢;

用python 怎么 解将100元兑换为1元、5、10元的零钱,请问有多少种兑换方...
1: 10 5: 0 10: 9 1: 10 5: 2 10: 8 1: 10 5: 4 10: 7 1: 10 5: 6 10: 6 1: 10 5: 8 10: 5 1: 10 5: 10 10: 4 1: 10 5: 12 10: 3 1: 10 5: 14 10: 2 1: 10 5: 16 10: 1 1: 10 5: 18 10: 0 1: 15 5: 1 10: 8 1: 15 5: 3 10...

把一张100元人民币换成5元,10元和20元的纸币,每种纸币至少一张,问同...
三.当5元有6个时,10元可以有(5个.3个.1个),20元可以有(1个.2个.3个).四.当5元有8个时,10元可以有(4个.2个),20元可以有(1个.2个).五.当5元有10个时,10元可以有(3个.1个),20元可以有(1个.2个)六.当5元有12个时,10元有2个,20元有1个.七.当5元有14个时,10元有1...

1张1元可以换成()张1角和()张2角()张5角
1张1元可以换成(10)张1角和(5)张2角(2)张5角。这题考查的是人民币换算问题。要知道1元=10角这个兑换进制。10*1角=10角=1元。5*2角=10角=1元。2*5角=10角=1元。1元=10角=100分,1角=10分。

一年级的1O元一5元8角等于多少?
此题方法依赖于元与角的换算关系,1元=10角 先把角转化成元 8角=0.8元 5元8角=5.8元 10元-5.8元=4.2元 也就是4元2角。

一张100元人民币换成1元,2元,5元,10元的纸币,每种纸币至少一张,问同...
1、2、2、5、10、10、10、10、10、10、10、10、10 1、1、2、2、2、2、5、5、10、10、10、10、10、10、10、10、1、1、1,2、5、10、10、10、10、10、10、10、10、10 1、1、1、1、2、2、2、5、5、10、10、10、10、10、10、10、10 1、1、1、1、1、2、2、2、2、2、...

有一张面额为100元的人民币,要兑换成0.5元、5元和10元面值的共100张...
100元换10元的10张 100元换5元的20张 100元换0.5元的200张 设换0.5元的X张,5元的为Y,10元的为Z,X+Y+Z=100 0.5X+5Y+10Z=100 9Y+19Z=100 Y=9,Z=1,X=90;所以0.5元的90张,5元的9张,10元的1张

10元5分用小数表示是( ) A、10.5元 B、1.05元 C、10.05元
先把5分换算成元数,用5除以进率100得0.05元,再加上10元得10.05元. 10元5分=10.05元;故选:C. 点评: 此题考查名数的换算,把高级单位的名数换算成低级单位的名数,就乘单位间的进率,把低级单位的名数换算成高级单位的名数,就除以单位间的进率.

把一张20元的人民币兑换成1元,5元或10元的人民币,一共有多少种不同的...
2*10元,4*5元,20*1元,10元+2*5元,10元+5元+5*1元,10元+10*1元,3*5元+5*1元,2*5元+10*1元,5元+15*1元 9种

用一张100元的人民币去换5元,10元,20元面值的零钱,同时要求所换零钱的...
十种,用解方程方法 十个10元 5个20 2个50 8个10,1个20 6个10 ,2个20 4个10 ,3个20 2个10,4个20 5个10,1个50 3个10,1个20,1个50 1个10,2个20,1个50 包括5张不?如果不包括就:1张20,8张10,2张20,6张10 2张20,5张10,2张5 3张20,4张10,3张20,3张10...

英德市13734831478: 100元换成10元5元1元纸币,每种至少一张,一共多少换法 -
枞点胃炎: 81种换法 一 ,每种至少一张,实际应为至少10元、5元各一张,1元的5张.共20元,剩下的80元可任意分配. 二,80元的零钱可以如下: 8张10元.1种 7张10元,5元的2、1、0张(差额为1元,下同).3种 6张10元,5元的4、3、2、1、0张.5种 5张10元,5元的6、5、4、3、2、1、0张.7种 ...... 1张10元,5元的14、13.....6、5、4、3、2、1、0张.15种 0张10元,5元的16、15、14、13.....6、5、4、3、2、1、0张.17种 三,总的换法为 1+3+5+.....+15+17=81种

英德市13734831478: 一张100元人民币换成1元,2元,5元,10元的纸币,每种纸币至少一张,问同学们共有几种方法 -
枞点胃炎:[答案] 有16种,(下面以括号里的数字代替个数) 一.当5元有2个时,10元可以有(7个.5个.3个.1个),20元可以有(1个.2个.3个.4个).10元和20元是对应的,即;当10元是7个时,20元是1个.下面一样. 二.当5元有4个时,10元可以有(6个.4个.2个),...

英德市13734831478: 一张100元人民币换成1元,2元,5元,10元的纸币,每种纸币至少一张,问同学们共有几种换法 -
枞点胃炎:[答案] 1、2、2、5、10、10、10、10、10、10、10、10、101、1、2、2、2、2、5、5、10、10、10、10、10、10、10、10、1、1、1,2、5、10、10、10、10、10、10、10、10、101、1、1、1、2、2、2、5、5、10、10、10、10、10、10...

英德市13734831478: 用1张面值100元的纸币,换成面值分别为1元、2元、5元、10元、20元、50元的纸币.面值/元125102050张数(1)请将表格填写完整.(2)观察表格,面值和... -
枞点胃炎:[答案] (1)100÷1=100(张), 100÷2=50(张), 100÷5=20(张), 100÷10=10(张), 100÷20=5(张), 100÷50=2(张), ... 面值/元125102050张数10050201052(2)1*100=100, 2*50=100, 5*20=100, 10*10=100, 20*5=100, 50*2=100, 因为相对应的...

英德市13734831478: 王老师想把一张面值100元的人民币换成10元或5元的人民币有几种换发? -
枞点胃炎: 十张10元 九张10元.二张5元 ...... 二十张5元 共11种换法.希望采纳

英德市13734831478: 把一张100元人民币换成5元,10元和20元的纸币,每种纸币至少一张,问同学们共有几种换法 -
枞点胃炎:[答案] 有16种,(下面以括号里的数字代替个数)一.当5元有2个时,10元可以有(7个.5个.3个.1个),20元可以有(1个.2个.3个.4个).10元和20元是对应的,即;当10元是7个时,20元是1个.下面一样.二.当5元有4个时,10元可以有(6个.4个.2个...

英德市13734831478: c语言两张100纸币,换成10元,5元和1元纸币每样至少一张,共50张问有多少方案(求部骤说明) -
枞点胃炎: #include <stdio.h> #include <stdlib.h> void main(void) { int n5,n10,n20; for (n5=1;n5<20;n5++){ for (n10=1;n10<10;n10++){ for (n20=1;n20<5;n20++){ if (n5 * 5 + n10 * 10 + n20 * 20 == 100) printf("$5--%d, $10--%d, $20--%d\n",n5,n10,n20); } } } }

英德市13734831478: 怎么用C语言求把100元换成20元,10元,5元的纸币.要求每种纸币至少有一张. -
枞点胃炎: #include<stdio.h> int main() {int a,b,c,n=0; printf("20元\t10元\t5元\n"); for(a=1;a<5;a++) for(b=1;b<(100-20*a)/10;b++) {c=(100-20*a-10*b)/5; printf("%2d\t%2d\t%2d\n",a,b,c); n++; } printf("共%d种方案\n",n); return 0; }

英德市13734831478: php 将100元纸币兑换成10元、5元和1元纸币共20张,输出各种兑换法,并统计个数 -
枞点胃炎: <?php for($s=0; $s<=10; $s++){//10元可以为0张,最多可以为10张for($w=0; $w<=20; $w++){//5元可以为0张,最多可以为20张for($y=0; $y<=100; $y++){//1元可以为0张,最多可以为100张if (($s+$w+$y)==20 && (10*$s)+(5*$w)+(1*$y)==100){//$s not $iecho $s," ",$w," ",$y;//一个逗号为中文逗号echo "<br/>";//换行}}} } 结果: 0 20 0 4 11 5 8 2 10

英德市13734831478: 一张100元人民币,换成100张人民币,应该怎样换?不能只换1元的. -
枞点胃炎: 1张50元1张20元1张10元1张5元2张2元4张5角90张1角、 一共100张

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网