当前位置:首页 » 操作系统 » 一元换算法

一元换算法

发布时间: 2022-05-10 20:41:49

❶ 10元人民币换成2元和1元有几种换法

正确的答案是共有六种换法:其算法如下:
1元 2元
0 5
2 4
4 3
6 2
8 1
10 0
10元的面额共有:6种换法

❷ 要把一张面值为1元的人民币换成零钱,问有多少种换法

肯定是人能算出的答案,实际上这个问题可以简化的。第一种是先看一分钱,有几种方式能组合成别的面值的钱,然后累加就可以算出来。我算是((1+3)*2*2+3)*2=38,差不多。。。

❸ 编写程序实现用一元人民币换成一分、两分、五分的硬币共50枚.。

1.int Sum=100;//1元为100分
for (int i=0;i<20;i++){
//i为5分的数量;
for(int j=0;i<50;j++) {
//j为2分的数量;
for(int k=0;k<100;k++) {
//k为1分的数量。
int num=5i+2j+5;
int Cou=i+j+k;
if(num==Sum&&cou==50) response.
write(num); }
} }

2.public class Money {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub for(int i = 0;i <= 100;i++){
for(int j = 0;j <= 100;j++){
for(int z = 0;z <= 100;z++){
if((1 * i) + (2 * j) + (5 * z) == 100){ System.out.println("第" + i + "种情况: "+ "一分的硬币有: " + i + "枚; " + "二分的硬币有: " + j + "枚, " + "五分的硬币有: " + z + "枚");
}
} } } }}
拓展资料
1.c++语言的整数常量有三种形式:十进制、八进制、十六迸制。
(1)十进制整数是由不以0开头的0~9的数字组成的数据。
(2)八进制整数是由以0开头的0~7的数字组成的数据。
(3)十六进制整数是由以0x或0x开头的0~9的数字及A~F的字母(大小写字母均可)组成的数据。
例如:
0,63,83是十进制数。
00,077,0123是八进制数。
0x0,Ox0,0x53,0x53,0x3f,0x3f是十六进制数。
2.整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关
3.算法的特性有5个:
有限性:有限步骤内正常结束,不能形成无穷循环。
确定性:算法中的每一个步骤必须有确定含义。
无二义性:算法中不能拥有二义性。
输入或输出:至少有一个或多个输入和输出。
可行性:原则上能精确进行,操作可通过已实现基本运算执行有限次而完成。
4、算法、语言、程序的关系:
算法:描述了数据对象的元素之间的关系(包括数据逻辑关系,存储关系描述)
描述算法的工具:算法可用自然语言、框图或高级程序设计语言(如C语言、Java、Python)进行描述。
程序是算法在计算机中的实现。
5、算法性能分析
评价算法的标准:评价一个算法的好坏就是看它的时间和空间,因为空间现在的内存都很大,考虑的比较少,我们主要考虑算法的时间复杂度怎样进行衡量。
性能性价:对问题规模N与该算法在运行时所占的空间S与所耗费的时间T给出一个数量关系的评价。
6.问题规模N——对不同的问题其含义不同,对矩阵是阶数;对多项式运算是多项式项数;对图是顶点个数;对集合运算是集合中元素个数。衡量算法效率的方法一般有两种:
①事后统计法,缺点必须执行程序,其他因素会掩盖算法本质。
②事前估算法。
和算法执行时间相关的因素有:
7.算法选用的策略,如冒泡排序
问题的规模
编写程序的语言
编译程序产生的机器代码的质量
8.计算机执行指令的速度
算法执行时间:大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。一般针对算法中基本操作语句(源操作)的执行次数做出估计,从中得到算法执行时间的信息

❹ 把一元兑换成1分、2分、5分的硬币,有几种换法

用1分2分5分硬币凑成1元共有多少种方法?
这是一种直接的解法。基本想法是按1五分硬币的个救将所有凑法分类。
假定五分硬币有20个,则没有二分硬币,因此只有一种凑法。假定五分硬币有19个,币值为5×19=95分,
因此要使总币值不超过1元=100分,所取二分硬币的币值不能超过5分。很明显,二分硬币的个数可以为0个,1个,或2个,这样就有三种不同的凑法。如此继续下去,可以看出不同的凑法共有
1+3+6+8+11+13+……+48+51
=(1+48)+(3+46)+(6+43)+……+(23+26)+51
=49×10+51
=541(种)
答:共有541种凑法。
【解法2】这是一种比较巧妙的简便算法。

50个二分硬币和20个五分硬币分成甲、乙二组。
因为这些硬币的总币值为
50×2+20×5=200(分)。所以甲、乙二组的币值无非是下面三种情形;
(1)甲组的钱比一元少,乙组的钱比1元多。
(2)甲组的钱比一元多,乙组的钱比1元少。
(3)甲、乙两组的钱相等,都是一元钱。
这里有两点要特别注意:第一,情形(1)与情形(2)是对称的,只不过甲和乙交换了位置。第二,(1)的所有可能性加上(3)的所有可能性就是我们的问题的答案。
那么(1),(3)的个数各有多少呢?
先计算一下上面的分组总共有多少不同的方法。因为二分硬币有50个,所以有51种分法。类似地,五分硬币有20个,所以有21种分法。这样总共就有21×51种不同的分法。
再来看甲,乙两组的钱都是一元这种情形的分法有多少种?很明显,这时五分硬币必须有偶数个(为什么?),所以五分硬币的数可以为0个,2个,……,20个,共有十一种分法。
根据情形(1)和情形(2)的对称性,容易知道(1)的个数为(21×51-11)÷2=530
(1)的个数加上(3)的个数是530+11=541(种)这就是答案。
【分析与讨论】这是一道思考与计算相结合的题。用解法1来做的同学比较多。但大部份同学都没有算对,也许是“数”不清楚吧。学会“数”数是数学原基本的功夫,可不能马虎。提高你的“数”数能力,不妨换个方法试试。

❺ 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种
看到这个题目的第一感觉就是一个三元一次方程的求解,编程的话,就是三个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.array(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();
}
}

❻ 用人民币一元兑换1分,2分,5分硬币,共有多少种不同换法。

54种
思路:这实际上是一个求解三维方程的问题。假设一维方程由x1点、y2点和z5点组成,则
X+2Y+5Z=100(100点是一美元),然后使用穷举法来找到方程的解!
程序:
#包括“stdio.h”
#包括“math.h”
main()
{int z,y,x;
对于(z=1;z<20;z++)
对于(y=1;y<50;y++)
对于(x=1;x<100;x++)
如果(x+2*y+5*z==100)
printf(“%d+2*%d+5*%d=100 ”,x,y,z);
拓展资料:
C语言是一种面向过程的抽象通用编程语言,广泛应用于底层开发。C语言可以简单地编译和处理底层内存。C语言是一种高效的编程语言,只产生少量的机器语言,并且可以在没有任何运行环境支持的情况下运行虽然C语言提供了许多低级处理功能,但它仍然有许多优点。以标准规范编写的C语言程序可以在许多计算机平台上编译,包括嵌入式处理器和超级计算机等操作平台。
C语言是一种面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言不同,C语言的设计目标是提供一种编程语言,它能够以简单的方式编译和处理低级内存,只生成少量的机码,运行时不需要任何r运行环境支持。C语言比汇编语言描述问题更快、更容易。C语言通常比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。[2]
目前,C语言在程序设计领域得到了广泛的应用,它综合了高级语言和汇编语言的优点,与其他程序设计语言相比具有很大的优势,计算机系统设计和应用程序设计是C语言应用的两大领域,同时,C语言在程序设计中的应用也越来越广泛ng的通用性,可应用于许多计算机操作系统,并具有显着的效率等。
C语言经过长期的发展,形成了完整的理论体系,在程序设计语言中占有重要地位。

❼ 1元人民币折合多少缅甸币

人民币兑200缅币(很难找的,很多地方找不到)一般兑换点(如赌场):1人民币兑250缅币 如果你用缅币换人民币的话,300缅币换1人民币答案

❽ 一元人民币等于多少越南币

按照2019年12月5日的汇率计算,1元人民币=3290.4866越南盾、1越南盾=0.0003人民币。

一、汇率计算方法

1、直接标价法

汇率升贬值率=(旧汇率/新汇率-1)*100

2、间接标价法

汇率升贬值率=(新汇率/旧汇率-1)*100(结果是正值表示本币升值,负值表示本币贬值)

(8)一元换算法扩展阅读

我国通常采用100单位外币作为标准,折算为一定数量的人民币,即用人民币表示某种外币的价格,其公式为100单位外币=x¥。

当100单位外币可以兑换更多的人民币时,外汇汇率上升,外币相对于人民币升值,而人民币贬值,即用人民币表示的外币价格上涨,此时有利于我国的出口不利于进口;反之,则说明外汇汇率跌落,外币相对于人民币贬值,而人民币升值,此时有利于我国的进口不利于出口。

综上所述,如果人民币贬值,外币升值,那么人民币汇率就会下降,而外汇汇率则会上升;反之,如果人民币升值,外币贬值,那么人民币汇率就会上升,而外汇汇率相应下降。

❾ 将1元人民币兑换成1,2,5分的硬币,有多少种换法C#编程解决

int total = 100;
int sampleCount = 0;
int c_5_max = total / 5;
//5分的取值范围为0-20,也就是说5分有,21种取法
for (int c_5 = 0; c_5 <= 20; c_5++ )
{
//考虑5分的第n种取法时,2分的取法
int c_2_left = total - c_5 * 5;
int c_2_max = c_2_left / 2;
sampleCount += c_2_max + 1;
//2分的取法有(total - c_5 * 5)/2 + 1种
//在5分和2分的取法已固定时,1分的取法只有一种了,所以不用计算1分的了
}
Console.WriteLine("共有{0}种取法。", sampleCount);

结果是有541种取法

热点内容
死歌脚本 发布:2024-10-09 03:11:55 浏览:85
企业内网搭建电影服务器侵权吗 发布:2024-10-09 03:07:14 浏览:105
python读取jpg 发布:2024-10-09 02:50:22 浏览:154
王者荣耀的服务器ip在哪 发布:2024-10-09 02:44:48 浏览:77
安卓怎么下载李宁 发布:2024-10-09 02:31:37 浏览:343
配置不高pr哪个版本最好用 发布:2024-10-09 01:57:15 浏览:789
编译OpenWrtipv6 发布:2024-10-09 01:51:40 浏览:124
python写入字节 发布:2024-10-09 01:24:22 浏览:650
如何设置超高难度密码 发布:2024-10-09 01:19:05 浏览:180
linux只读文件修改 发布:2024-10-09 01:13:08 浏览:87