【问题标题】:matrix row and column not equal check if check columns has only number one矩阵行和列不相等检查检查列是否只有第一
【发布时间】:2021-12-30 16:12:50
【问题描述】:

我必须检查矩阵中每列等于 1 的元素是否有行和列不相等。当我尝试所有解决方案时,它适用于行 == 列。我尝试对每一列进行求和,然后检查它是否等于 6 行,因为我希望列中的所有元素都等于 1。

这是我的输入和输出任务的屏幕截图: task is here as picture

任务描述

在火车时刻表中,火车的路线由一系列位描述(1 - 如果火车停在车站,0 - 如果不是)。
编写一个程序,给出位序列,其中只有那些位为 1,所有火车都停止。

输入

标准输入的第一行 包含列车数量 (1≤T≤100) 和站数(1≤S≤100)。 接下来的 T 行 包含代表每列火车路线的序列: S 位以空格分隔, 其中 1 表示火车(行)停在给定的车站(列), 0 表示火车不停。

输出

标准输出的第一行应该包含 由空格分隔的 S 位序列, 其中 1 表示所有火车都停站, 0 表示并非所有列车都停止。

示例

输入

6 8
1 1 1 1 1 1 0 1 
1 0 0 0 1 1 0 1 
1 0 0 0 1 0 0 0 
1 1 1 0 1 0 0 0 
1 1 0 1 1 0 0 1 
1 1 1 0 1 0 0 1

输出

1 0 0 0 1 0 0 0

这是我的 C++ 代码:

#include <iostream>
#include <climits>

using namespace std;


int main()
{
    int n,m;
    cin>>n>>m;
    int trainStops[n][m];
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            cin>>trainStops[i][j];
        }
    }
    int sum =0;
    int output[m]={0};
    for (int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            if(trainStops[j][i]==1){
                output[j]+=trainStops[j][i];
            }
        }
    }
cout<<"==============="<<endl;
    for(int i=0; i<m; i++)
    {
        cout<<output[i]<<" ";
    }

    return 0;
}

【问题讨论】:

  • 危险的堆栈杀手:int trainStops[n][m];。在典型的 PC 上,如果 mn 是几百个,程序自动存储将被耗尽,导致通常所说的 - 等待它! - 堆栈溢出。这只是可变长度数组在标准 C++ 中不合法的原因之一。
  • 想一想其中 1 表示所有列车都停止,0 表示并非所有列车都停止。以及这与output[j]+=trainStops[j][i];产生的数字有何关系
  • 1-对我来说,解决任务的语言无关紧要,因为我会理解它是如何工作的 c 和 c++ 对我来说是相同的,因为你没有使用语言中的预定义函数libs,但非常感谢您的回答,我同意您的看法 2-对于“M”和“N”最大和最小无关紧要,因为我知道如何做测试用例来定义 maxM 和 maxN 做到这一点一个while循环或者如果一个条件或捕获第二条评论的错误非常感谢你,我完全同意你
  • 对于评论号 3 3- 对我来说,我试图得到每一列的总和,我们知道如果火车在所有车站停止意味着该列在每个车站都有 1,总和将是数字of station 是行数,然后使用 for 循环和 if 条件来检查 output[i]==8 cout 1 not cout 0 我希望我能澄清我的答案谢谢你的提问
  • 这不仅仅是关于你。这个问题必须对那些关注的人有用,否则它不会保留在网站上,也不太可能得到答案。

标签: c++ algorithm


【解决方案1】:

如果我有兴趣知道另一种方法,这就是我解决它的方法,提前谢谢你。

#include <iostream>
#include <climits>

using namespace std;


int main()
{
    int n,m;
    cin>>n>>m;
    int trainStops[n][m];
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            cin>>trainStops[i][j];
        }
    }
    int sum =0;
    int output[m]={0};
    for (int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
                output[i]+=trainStops[j][i];

        }
    }

    for(int i=0; i<m; i++)
    {
        if(output[i]==n){
            cout<<1<<" ";
        }
        else{
            cout<<0<<" ";
        }
    }
    cout<<endl;

    return 0;
}

【讨论】:

  • 答案应该解释代码回答问题的原因。当一个答案基本上只包含代码时,对于未来有相同问题的访问者来说,它往往没有什么价值。
  • 看起来与我想出的解决方案几乎相同。不过,我利用了一个小技巧。当您使用&lt;&lt; 打印bool 时,它会吐出1 或0,除非您特别要求使用boolalpha 输入“真”或“假”。这意味着你可以for(int i=0; i&lt;m; i++) cout &lt;&lt; (output[i]==n) &lt;&lt; ' '; cout&lt;&lt;endl;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2015-10-26
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多