我不知道为什么,但程序没有进入 FOR 循环。我对编程完全陌生,所以请避免任何错误(如果有)。非常感谢帮助。
这个问题来自编码网站之一:
您将获得一份参加 ACM-ICPC 世界总决赛的 N 人名单。他们每个人要么精通某个主题,要么不精通。找出一个 2 人团队可以知道的最大主题数。还要找出有多少团队可以知道最大数量的主题?
输入格式
第一行包含两个整数 N 和 M,由一个空格分隔,其中 N 表示人数,M 表示主题数。跟随 N 行。每行包含一个长度为 M 的二进制字符串。在该字符串中,1 表示第 i 个人知道特定主题,0 表示第 i 个人不知道该主题。
输出格式
在第一行,打印 2 人团队可以知道的最大主题数。在第二行,打印可以知道最大主题数的团队数。
约束
Run Code Online (Sandbox Code Playgroud)2 ? N ? 500 1 ? M ? 500样本输入
Run Code Online (Sandbox Code Playgroud)4 5 10101 11100 11010 00101样本输出
Run Code Online (Sandbox Code Playgroud)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;
}
Run Code Online (Sandbox Code Playgroud)
你有一个循环,计数N到0:
while (N--) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后你设置l为N - 1,也就是说-1:
int l = N - 1;
Run Code Online (Sandbox Code Playgroud)
然后你的for循环想要运行 while p < l。pis initial 0,lis initial -1,所以循环永远不会运行:
for ( int p = 0; p < l; p++ ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)