藍橋模擬題 還款計算(二分搜尋)

2021-07-30 03:13:12 字數 2698 閱讀 9359

銀行貸款的等額本息還款方法是:

每月還固定的金額,在約定的期數內正好還完(最後乙個月可能會有微小的零頭出入)。

比如說小明在銀行貸款1萬元。貸款年化利率為5%,貸款期限為24個月。

則銀行會在每個月進行結算:

結算方法是:計算本金在本月產生的利息: 本金 x (年利率/12)

則本月本金結餘為:本金 + 利息 - 每月固定還款額

計算結果會四捨五入到「分」。

經計算,此種情況下,固定還款額應為:438.71

這樣,第一月結算時的本金餘額是:

9602.96

第二個月結算:

9204.26

第三個月結算:

8803.9

…. 最後乙個月如果仍按固定額還款,則最後仍有0.11元的本金餘額,

但如果調整固定還款額為438.72, 則最後乙個月會多還了銀行0.14元。

銀行會選擇最後本金結算絕對值最小的情況來設定 每月的固定還款額度。

如果有兩種情況最後本金絕對值相同,則選擇還款較少的那個方案。

本題的任務是已知年化利率,還款期數,求每月的固定還款額度。

假設小明貸款為1萬元,即:初始本金=1萬元。

年化利率的單位是百分之多少。

期數的單位為多少個月。

輸入為2行,

第一行為乙個小數r,表示年率是百分之幾.r<30

第二行為乙個整數n,表示還款期限。 (6<=n<=120)

要求輸出為乙個整數,表示每月還款額(單位是:分)

例如:

輸入:

4.01

24程式應該輸出:

43429

再比如:

輸入:

6.85

36程式應該輸出:

30809

利用二分搜尋的思想,先計算出每月還款的上下限,無利息時最少,最後一次還最多,即:

**int left = 1000000 / n;

int right = 1000000 * pow((100 + r)/ 100,n/12) / n;**

其中精確到分,我給雖有數字均擴大100,把問題轉換成為整數的二分。

其中關鍵要對sum取double型因為分之後的小數字四捨五入時會對分位產生影響,

因此: sum = (double)(int)(sum + 0.5);手動四捨五入很關鍵。

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

double r, n;

double ans[100];

double temp[100];

int cnt = 0;

int search(int x)

ans[cnt] = x;

if (x == 30809) cout

<< sum << endl;

if (x == 30808) cout

<< sum << endl;

temp[cnt] = sum;

cnt++;

return sum;

}int main()

if (left == right) break;

}if (flag) cout

<< mid;

else

else

if (abs(a) == abs(temp[i]))}}

printf("%.0f\n", ans[b]);

}return

0;}

也可以不記錄所有的結餘sum值,只需要比較,mid,mid-1,mid+1三個數的結果即可。如下所示:

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

/*有資料不對。。。。。

*/double r, n;

int search(int x)

return (int)sum;

}struct node

;node ans[5];

bool cmp(node s1, node s2)

int main()

if (left == right) break;

}ans[0].x = search(mid);ans[0].mid = mid;

ans[1].x = search(mid+1);ans[1].mid = mid+1;

ans[2].x = search(mid-1);ans[2].mid = mid-1;

sort(ans, ans + 3, cmp);

cout

<< ans[0].mid << endl;

return

0;}

藍橋 還款計算(暴力,浮點數二分)

銀行貸款的等額本息還款方法是 每月還固定的金額,在約定的期數內正好還完 最後乙個月可能會有微小的零頭出入 比如說小明在銀行貸款1萬元。貸款年化利率為5 貸款期限為24個月。則銀行會在每個月進行結算 結算方法是 計算本金在本月產生的利息 本金 x 年利率 12 則本月本金結餘為 本金 利息 每月固定還...

藍橋杯 分巧克力(二分搜尋)

歷屆試題 分巧克力 時間限制 1.0s 記憶體限制 256.0mb 問題描述 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力...

刷題 二分搜尋 (1)

模板 找出最左邊的乙個,最右邊的乙個,和長度 注意找左位置時要判斷 1 不可以是字串結尾,不然為0或為空 2 不可以不等於key include include include using namespace std intn,m const int n 100003 int d n intmain...