如何在C++中找出产生最高利息的账户并输出对应信息
解决C++账户利息计算中关联最高利息与对应账户编号的问题
我完全懂你一开始卡壳的点——能算出每个账户的利息,可就是没法把最高利息和对应的账户编号对应上,甚至越加循环越乱。不过你最终找到的思路特别靠谱:通过单独存储利息字段+跟踪最高利息的账户编号,完美解决了这个问题!我来帮你拆解下整个实现逻辑:
初始程序的局限
原来的代码只完成了余额更新和输出,但存在两个关键问题:
- 没有单独记录每个账户产生的利息,只能通过更新后的余额反推,不利于后续比较
- 缺少跟踪最高利息对应账户的逻辑,没法直接关联到账户编号
最终代码的核心改进
你对代码的几处调整非常精准:
扩展结构体,新增利息字段
在Accounts结构体里加了double Interest,专门用来存储每个账户计算出的利息,这样余额和利息分开存储,逻辑更清晰,也方便后续的比较操作。新增跟踪变量,实时更新最高记录
定义了HighestInterest(记录当前最高利息)和HighestAccountNumber(记录对应账户编号),在遍历每个账户计算完利息后,立刻做一次比较:如果当前账户的利息比已记录的最高值大,就更新这两个变量。这样一次遍历就完成了计算和跟踪,不用额外循环,效率很高。优化输出,展示完整信息
不仅输出每个账户的编号、原余额和利息,最后还专门打印出最高利息及其对应的账户编号,完美满足了需求。
最终实现代码
#include <iostream> using namespace std; const int MAXACCOUNTS =8; struct Accounts { int AccountNumber; double Balance; int DaysSinceDebited; double Interest; }; int main() { int i; struct Accounts AccountsArr[MAXACCOUNTS] = {{1001,4254.40,20,0}, {7940,27006.25,35,0}, {4382,123.50,2,0}, {2651,85326.92,14,0}, {3020,657.0,5,0}, {7168,7423.34,360,0}, {6245,4.99,1,0}, {9342,107864.44,45,0} }; double HighestInterest = 0; int HighestAccountNumber = 0; cout << "Acct No, " << "Balance " << "Interest" << endl; for (i = 0; i < MAXACCOUNTS; i++) { if ((AccountsArr[i].Balance > 10000) || (AccountsArr[i].DaysSinceDebited > 30)) { AccountsArr[i].Interest = AccountsArr[i].Balance * 0.06; } else { AccountsArr[i].Interest = AccountsArr[i].Balance * 0.03; } if (HighestInterest < AccountsArr[i].Interest) { HighestInterest = AccountsArr[i].Interest; HighestAccountNumber = AccountsArr[i].AccountNumber; } cout << AccountsArr[i].AccountNumber << " "; cout << AccountsArr[i].Balance << " "; cout << AccountsArr[i].Interest << endl; } cout << "The highest interest is: " << HighestInterest << " Account Number: " << HighestAccountNumber; return 0; }
小优化建议(可选)
可以把利率定义成常量,比如:
const double HIGH_INTEREST_RATE = 0.06; const double LOW_INTEREST_RATE = 0.03;
这样后续修改利率时,只需要改常量值,不用遍历修改代码里的数值,可读性和维护性更好。
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

