【问题标题】:Program is not entering into FOR loop程序未进入 FOR 循环
【发布时间】:2014-07-06 17:35:41
【问题描述】:

我不知道为什么,但程序没有进入 FOR 循环。 我对编程完全陌生,所以请避免出现任何错误。 非常感谢您的帮助。

这个问题来自编码网站之一::

您将获得一份参加 ACM-ICPC 世界总决赛的 N 人的名单。他们每个人要么精通某个主题,要么不精通。找出 2 人团队可以知道的最大主题数。并找出有多少团队可以知道最大数量的主题?

输入格式

第一行包含两个整数N和M,用一个空格隔开,其中N代表人数,M代表主题数。接下来是 N 行。 每行包含一个长度为 M 的二进制字符串。在该字符串中,1 表示第 i 个人知道某个特定主题,0 表示第 i 个人不知道该主题。

输出格式

在第一行,打印 2 人团队可以知道的最大主题数。 在第二行,打印可以知道最大主题数的团队数。

约束

2 ≤ N ≤ 500 

1 ≤ M ≤ 500

示例输入

4 5
10101
11100
11010
00101

样本输出

5
2

这是我的代码::

#include<iostream>

using namespace std;

int main(){
    int N,M;
    cin>>N>>M;

    if(N>=2 && N<=500 && M>=1 && M<=500){
        int x= (N*(N-1))/2;
        int i,j,k;
        int Topic[x];
        for(i=0;i<x;i++){
            Topic[i]=0;
        }
        int y= N*M;
        int a;
        char Array[y];
        while(N--){
            for(i=0;i<M;i++){   
                cin>>Array[a];
                a++;
            }  
          }
        int count;
        int d=0;
        int l=N-1;

        // This FOR LOOP ..

        **for(int p=0;p<l;p++){             
            for(int q=p+1;q<N;q++){
                count=0;
                for(k=0;k<M;k++){
                    int temp=k+(q*M);
                    int temp1=k+(p*M);
                    if(Array[temp]+Array[temp1]!=0){
                        count+=1;
                    }
                }
                Topic[d]=count;
                d++;
            }
        }**
        int max=Topic[0];
        int counter=0;
        for(i=0;i<x;i++){
            if(max>Topic[i]){
                 max=Topic[i];  
                 counter=1;
            }
            else if(Topic[i+1]=Topic[i]){
                counter+=1;
            }
         }

     cout<<max<<endl;
     cout<<counter;

    }

    return 0;
}

【问题讨论】:

  • 您是否尝试在循环之前打印出 N 或 l 以查看它们是否有问题?
  • 读入数组时不会初始化a
  • 学习调试:在代码中的某些点设置断点(或写入输出)。检查这些位置的变量并尝试手动遵循程序逻辑。消除代码,直到它工作。放回代码并查明您在哪里得到意外结果。
  • 我试图打印其他东西而不是 N 或 I ..
  • 是的,p 在初始化时实际上是 -1。谢谢大家的帮助!!

标签: c++ for-loop


【解决方案1】:

您有一个循环将N 计数到0:

while (N--) {
  // ...
}

然后你将l设置为N - 1,也就是-1:

int l = N - 1;

然后你的for 循环想要在p &lt; l 时运行。 p 最初是 0,l 最初是 -1,所以循环永远不会运行:

for ( int p = 0; p < l; p++ ) {
  // ...
}

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 2011-09-22
    • 2014-04-19
    • 2014-04-06
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多