當前位置:首頁 » 操作系統 » 一元換演算法

一元換演算法

發布時間: 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 05:17:53 瀏覽:816
c語言可逆素數 發布:2024-10-09 05:13:44 瀏覽:920
班級采訪問題 發布:2024-10-09 04:45:44 瀏覽:497
單人地圖腳本 發布:2024-10-09 04:45:32 瀏覽:754
易語言cf自瞄源碼 發布:2024-10-09 04:36:14 瀏覽:121
安卓和蘋果哪個更難修理 發布:2024-10-09 04:36:12 瀏覽:26
黎明覺醒安卓什麼配置 發布:2024-10-09 04:32:05 瀏覽:127
助手autojs腳本 發布:2024-10-09 04:31:40 瀏覽:186
sql判斷今天 發布:2024-10-09 04:19:35 瀏覽:943
拆分視頻需要哪些配置 發布:2024-10-09 04:06:39 瀏覽:912