Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环问题,过早停止_C++ - Fatal编程技术网

C++ 循环问题,过早停止

C++ 循环问题,过早停止,c++,C++,我有一个家庭作业,我觉得我快要做好了。任务如下: 银行相互贷款。在经济困难时期,如果一家银行破产,它可能无法偿还贷款。银行的总资产是其当前余额加上对其他银行的贷款。图8.1(附图)是显示五个银行的示意图。两家银行的当前余额分别为:251251757501万美元和1.81亿美元。从节点1到节点2的定向边表示气缸组1向气缸组2贷款4000万 如果一家银行的总资产低于某一限额,则该银行被视为不安全。如果一家银行不安全,它所借的钱就不能退还给贷款人,贷款人也不能将贷款计入其总资产。因此,贷款人也可能不

我有一个家庭作业,我觉得我快要做好了。任务如下:

银行相互贷款。在经济困难时期,如果一家银行破产,它可能无法偿还贷款。银行的总资产是其当前余额加上对其他银行的贷款。图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;
cout
for(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);
        }   
    }   
}