C++ 循环问题,过早停止
我有一个家庭作业,我觉得我快要做好了。任务如下: 银行相互贷款。在经济困难时期,如果一家银行破产,它可能无法偿还贷款。银行的总资产是其当前余额加上对其他银行的贷款。图8.1(附图)是显示五个银行的示意图。两家银行的当前余额分别为:251251757501万美元和1.81亿美元。从节点1到节点2的定向边表示气缸组1向气缸组2贷款4000万 如果一家银行的总资产低于某一限额,则该银行被视为不安全。如果一家银行不安全,它所借的钱就不能退还给贷款人,贷款人也不能将贷款计入其总资产。因此,贷款人也可能不安全 编写一个程序来查找所有不安全的银行。您的程序按如下方式读取输入。它首先读取两个整数,C++ 循环问题,过早停止,c++,C++,我有一个家庭作业,我觉得我快要做好了。任务如下: 银行相互贷款。在经济困难时期,如果一家银行破产,它可能无法偿还贷款。银行的总资产是其当前余额加上对其他银行的贷款。图8.1(附图)是显示五个银行的示意图。两家银行的当前余额分别为:251251757501万美元和1.81亿美元。从节点1到节点2的定向边表示气缸组1向气缸组2贷款4000万 如果一家银行的总资产低于某一限额,则该银行被视为不安全。如果一家银行不安全,它所借的钱就不能退还给贷款人,贷款人也不能将贷款计入其总资产。因此,贷款人也可能不
n
和limit
,其中n
表示银行数量,limit
是保证银行安全的最低资产。然后,它读取n
行,这些行描述id从0到n-1的n
银行的信息。行中的第一个数字是银行余额。第二个数字表示从银行借钱的数量,其余两个数字成对。每对描述一个借贷者。第一个数字是银行id,第二个数字是它借了多少钱。假设最大银行数量为100家。例如,五家银行的输入如下(限额为201)
5201
25 2 1 100.5 4 320.5
125 2 40 3 85
175 2 0 125 3 75
7510125
18111225
银行3的总资产为75加125,低于201,因此银行不安全。银行3不安全后,银行1的总资产变为125+40,现在也不安全。输出应为“不安全的银行为3 1”
这是我目前解决这个问题的办法。我不知道如何让它找到所有不安全的银行。就第一个。我已将其设置为接受静态输入进行测试。我有工作的用户输入代码准备好去,如果我可以让它正常工作
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 100;
double balance[SIZE];
double loan[SIZE][SIZE];
int nobanks;
int limit;
int i = 0;
int j = 0;
int k = 0;
int noborrowers;
double assets[SIZE];
bool isSafe[SIZE];
bool newunsafefound = true;
cout << "Enter number of banks and the limit:" << endl;
// Set all of the data
nobanks = 5;
limit = 201;
balance[0] = 25.0;
balance[1] = 125.0;
balance[2] = 175.0;
balance[3] = 75.0;
balance[4] = 181.0;
loan[0][1] = 100.5;
loan[0][4] = 320.5;
loan[1][2] = 40.0;
loan[1][3] = 85.0;
loan[2][0] = 125.0;
loan[2][3] = 75.0;
loan[3][0] = 125.0;
loan[4][2] = 125.0;
// Set array to all true values
for(i = 0; i < nobanks; i++)
{
isSafe[i] = true ;
}
cout << "Unsafe banks are: ";
i=0;
while(isSafe[i] == true)
{
newunsafefound=false;
i=0;
do
{
assets[i] = balance[i]; //Set assets to balance
for (j = 0; j < nobanks; j++) // Check if a bank has loans and add them to assets
{
if (loan[i][j] >= 0)
assets[i] += loan[i][j];
}
if (assets[i] < limit) // Check to see if current bank meets limit
{
isSafe[i] = false; // Set bank to not safe if limit not met
newunsafefound = true;
cout << i << " " ; //Display the bank that is unsafe and a space for the next bank
k=0;
for (k = 0; k < nobanks; k++)
{
loan[i][k] = 0; //Set banks loans to 0 if unsafe.
k++;
}
}
i++;
} while(i < nobanks);
}
return (0);
}
#包括
使用名称空间std;
int main()
{
常数int SIZE=100;
双平衡[大小];
双倍贷款[规模][规模];
国际银行;
整数极限;
int i=0;
int j=0;
int k=0;
int Noborowers;
资产[规模]增加一倍;
布尔伊萨菲[尺寸];
bool newunsafefound=true;
coutfor(k=0;k
k
的额外增量看起来非常可疑;)您必须显式初始化loan
数组,因此您没有使用的元素没有任意值:
double loan[SIZE][SIZE] = {{0}};
另外,loan[i][k]=0;
意味着你将银行i
给银行k
的贷款归零,但你想要的是将银行i
借给银行k
的任何钱归零
还有一个问题:
- 在外循环的退出条件下(仅当最后一个银行
(nobank-1)
不安全时才会退出)
- 在处理
newunsafefound
时,它不执行变量名所建议的操作
//Astrid Giraldo
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int n;//银行数量
双重限制;//保证银行安全的最低总资产。
System.out.println(“输入银行数量:”);
n=input.nextInt();
System.out.println(“输入安全银行的最低总资产:”);
limit=input.nextDouble();
double[]借款人=新的double[n][n];
双倍[]余额=新的双倍[n];
内特·努伯罗斯;
for(int i=0;i<0.length;i++){
System.out.println(“输入银行余额”);
balance[i]=input.nextDouble();
System.out.println(“输入该银行的借款人数量”);
numBorrowers=input.nextInt();
对于(int j=0;j0){
借款人[i][unsafeBankId]=0;
if(未担保银行ID>i&&analizeUnsafeBanks(借款人,余额,i)<限额){
setLoanToZero(借款人、余额、i、限额);
}
}
}
}
公共静态无效markUnsafeBanks(双[]借款人,双[]余额,双限额){
for(int i=0;i<0.length;i++){
if(分析非银行(借款人、余额、i)<限额){
setLoanToZero(借款人、余额、i、限额);
}
}
}
公共静态无效银行(双[]借款人,双[]余额,双限额){
for(int i=0;i<0.length;i++){
双重资产=银行分析(借款人,余额,i);
if(资产<限额){
System.out.println(“银行”+i+”不安全。It资产为“+资产);
}
}
}
您真的没有缩进代码,还是只是在复制和粘贴代码时遇到问题?您不是应该从文件中读取输入吗
double loan[SIZE][SIZE] = {{0}};
// Astrid Giraldo
public static void main (String[] args) {
Scanner input = new Scanner(System.in);
int n; // number of banks
double limit; // Minimum total assets for keeping a bank safe.
System.out.println("Enter number of banks: ");
n = input.nextInt();
System.out.println("Enter minimum total assets to be a safe bank: ");
limit = input.nextDouble();
double[][] borrowers = new double[n][n];
double[] balance = new double[n];
int numBorrowers;
for (int i = 0; i < borrowers.length; i++) {
System.out.println("Enter the bank's balance");
balance[i] = input.nextDouble();
System.out.println("Enter number of borrowers from this bank");
numBorrowers = input.nextInt();
for (int j = 0; j < numBorrowers; j++) {
System.out.println("Enter borrower bank id and the amount borrowed: ");
borrowers[i][input.nextInt()] = input.nextDouble();
}
}
markUnsafeBanks(borrowers,balance, limit);
displayUnsafeBanks(borrowers, balance, limit);
}
public static double analizeUnsafeBanks(double[][] borrowers, double[] balance, int bankId) {
double sum = balance[bankId];
for (int i = 0; i < borrowers.length; i++) {
sum += borrowers[bankId][i];
}
return sum;
}
public static void setLoanToZero(double[][] borrowers, double[] balance, int unsafeBankId, double limit) {
for (int i = 0; i < borrowers.length; i++) {
if (borrowers[i][unsafeBankId] > 0) {
borrowers[i][unsafeBankId] = 0;
if ( unsafeBankId > i && analizeUnsafeBanks(borrowers, balance, i) < limit) {
setLoanToZero(borrowers, balance, i, limit);
}
}
}
}
public static void markUnsafeBanks(double[][] borrowers, double[] balance, double limit) {
for (int i = 0; i < borrowers.length; i++) {
if (analizeUnsafeBanks(borrowers, balance, i) < limit) {
setLoanToZero(borrowers, balance, i, limit);
}
}
}
public static void displayUnsafeBanks(double[][] borrowers, double[] balance, double limit){
for (int i = 0; i < borrowers.length; i++) {
double assets = analizeUnsafeBanks(borrowers,balance,i);
if ( assets < limit) {
System.out.println("Bank " + i + " is unsafe. It assets are " + assets);
}
}
}