>
學(xué)校機(jī)構(gòu) >
太原辰晨電腦培訓(xùn)學(xué)校 >
學(xué)習(xí)資訊>
2011年計(jì)算機(jī)二級(jí)考試二級(jí)C輔導(dǎo)實(shí)例編
2011年計(jì)算機(jī)二級(jí)考試二級(jí)C輔導(dǎo)實(shí)例編
49 2017-04-13
為了方便廣大考生更好的復(fù)習(xí),小編編輯整理提供了2011年C語(yǔ)言輔導(dǎo)實(shí)例編程(八),以供各位考生復(fù)習(xí)參考,希望對(duì)考生復(fù)習(xí)有所幫助。
最大化投資回報(bào)問題的實(shí)現(xiàn)
最大化投資回報(bào)問題:某人有一定的資金用來購(gòu)買不同面額的債卷,不同面額債卷的年收益是不同的,求給定資金,年限以及債卷面額、收益的情況下怎樣購(gòu)買才能使此人獲得最大投資回報(bào)。
程序輸入約定:第一行第一列表示資金(1000的倍數(shù))總量,第二列表示投資年限;第二行表示債卷面額總數(shù);從第三行開始每行表示一種債卷,占用兩列,前一列表示債卷面額,后一列表示其年收益,如下輸入實(shí)例,
100001
2
4000400
3000250
程序?qū)崿F(xiàn)如下,注釋幾乎說明了一切,所以不再另外分析。
///此數(shù)組是算法的關(guān)鍵存儲(chǔ)結(jié)構(gòu),用來存儲(chǔ)不同階段各種債卷
///組合下對(duì)應(yīng)可獲取的最大利息。
intsaifa[80005];
///此函數(shù)用于計(jì)算當(dāng)前債卷在不同購(gòu)買額下的最優(yōu)利息情況,
///注意此時(shí)的利息情況是基于上一次債卷的情況下計(jì)算得到的,
///也就是說當(dāng)前利息最優(yōu)是基于上一次利息最優(yōu)的基礎(chǔ)上計(jì)算出來的,
///這也正好體現(xiàn)了動(dòng)態(tài)規(guī)劃中“最優(yōu)化原則”:不管前面的策略如何,
///此后的決策必須是基于當(dāng)前狀態(tài)(由上一次決策產(chǎn)生)的最優(yōu)決策。
/*
動(dòng)態(tài)規(guī)劃的求解過程一般都可以用一個(gè)最優(yōu)決策表來描述,
對(duì)于本程序,以示例輸入為例,對(duì)于第一年,其最優(yōu)決策表如下:
在以前購(gòu)買了0張4000的債卷的基礎(chǔ)上再2張3000的,也可以在以前購(gòu)
買了1張4000的基礎(chǔ)上再買1張3000,經(jīng)比較取其收益大的,這就是典
型的動(dòng)態(tài)規(guī)劃中的當(dāng)前最優(yōu)狀態(tài)計(jì)算。
本程序中把上面的最優(yōu)決策二維表用一個(gè)一維數(shù)組表示,值得借鑒。
*/
voidadd(inta,intb)
{cout《《a《《“”《《b《《endl;//fordebug
for(inti=0;i《=80000;i++)
{
if(i+a》80000)
{
break;
}
if(saifa[i]+b》saifa[i+a])//累計(jì)同時(shí)購(gòu)買多種債卷時(shí)的利息
{
saifa[i+a]=saifa[i]+b;
}
if(i《200)//fordebug
cout《《i《《“-”《《saifa[i]《《“”;
}
cout《《endl;//fordebug
}
intmain(void)
012345678910(*1000)--(1)
0000400400400400800800800--(2)
000250400400500650800900900--(3)
(1)--表示首先選利息為400的債卷在對(duì)應(yīng)資金下的最優(yōu)利息。
(2)--表示可用來購(gòu)買債卷的資金。
(3)--表示在已有狀態(tài)下再選擇利息為300的債卷在對(duì)應(yīng)資金下的最優(yōu)利息。
注意上面表格,在求購(gòu)買利息為300的債卷獲得的最優(yōu)收益的時(shí)候,
參考了以前的最優(yōu)狀態(tài),以3行8列的650為例,7(*1000)可以
{
intn,d,money,year,pay,bond;
intii,i;
for(ii=0;ii
{
memset(saifa,0,sizeof(saifa));
scanf(“%d%d”,&money,&year);
scanf(“%d”,&d);
for(i=0;i
{
scanf(“%d%d”,&pay,&bond);
add(pay/1000,bond);
}
//計(jì)算指定年限內(nèi)最優(yōu)組合的本金利息總額
for(i=0;i
{cout《《saifa[money/1000]《《“”;//fordebug
money+=saifa[money/1000];
}
cout《《endl;//fordebug
printf(“%d\n”,money);
}
return0;
}
上述程序?qū)崿F(xiàn)方法同樣適合于背包問題,最優(yōu)庫(kù)存問題等,只是針對(duì)具體情況,最優(yōu)決策表的表示和生成會(huì)有所不同。
掃一掃
獲取更多福利
獵學(xué)網(wǎng)企業(yè)微信
獵學(xué)網(wǎng)訂閱號(hào)
獵學(xué)網(wǎng)服務(wù)號(hào)