【问题标题】:In this question im trying to solve a problem about for loops在这个问题中,我试图解决一个关于 for 循环的问题
【发布时间】:2022-01-09 21:33:00
【问题描述】:

在这个问题中,我正在寻找总和大于 2 的任何行或列,找到的第一行或列突破循环并在没有任何打印否的情况下打印是。该代码可以很好地打印每一行和每一列的总和,但它无法定义输入矩阵是否有任何具有这种质量的行或列。

#include <stdio.h>

int main()
{
int n,m,i,j;
int sum_r,sum_c;
int sw = 0;
scanf("%d%d",&m,&n);
int a [10][10];
for(i=0; i<m; i++)
{
    for(j=0; j<n; j++)
    {
        scanf("%d",&a[i][j]);
    }
}
for(i=0; i<m; i++)
{
    sum_r = 0;
    for(j=0; j<n; j++)
    {
        sum_r += a[i][j];
        if(sum_r >= 2)
        {
            sw = 1;
        }
    }
}

for(i=0; i<n; i++)
{
    sum_c = 0;
    for(j=0; j<m; j++)
    {
        sum_c += a[j][i];
        if (sum_c >= 2)
        {
            sw = 1;
        }
    }
}

if (sw = 1) printf("yes");
else printf("no");

return 0;

}

【问题讨论】:

  • if (sw = 1) -> if (sw == 1)
  • 另外,您可以立即printf("yes"); return 0; 退出您拥有sw = 1 的任何位置,因为无需再继续检查。然后在函数结束时你可以有一个无条件的printf("no");,因为到达那里意味着没有找到条件。所以根本不需要sw

标签: c for-loop if-statement sum nested-loops


【解决方案1】:

对于初学者来说,这个 if 语句中有一个错字

if (sw = 1) printf("yes");

您必须使用比较运算符== 而不是赋值运算符=

if (sw == 1) printf("yes");

或者更简单

if (sw) printf("yes");

如果我理解正确,那么您需要的是以下内容

for(i=0; !sw && i<m; i++)
{
    sum_r = 0;
    for(j=0; !( sum_r > 2 ) && j<n; j++)
    {
        sum_r += a[i][j];
        if(sum_r > 2)
        {
            sw = 1;
        }
    }
}

for(i=0; !sw && i<n; i++)
{
    sum_c = 0;
    for(j=0; !( sum_c > 2 ) && j<m; j++)
    {
        sum_c += a[j][i];
        if (sum_c > 2)
        {
            sw = 1;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2019-02-23
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多