永发信息网

我的代码出了什么问题 为什么实现不了

答案:1  悬赏:20  手机版
解决时间 2021-07-26 12:24
  • 提问者网友:黑米和小志
  • 2021-07-25 19:32

问题是:

SF面馆特派员发现了一扇“智慧之门”,要开启它必须解决N个谜题。特派员手下有M个人,特派员知道每个人能够解决哪些谜题。但他的手下们行踪不定,他想知道他至少碰到多少个手下并把这些人一起叫过去,一定可以保证开启这扇智慧之门,也就是说,求一个最小的Q,使得任意Q个人在一起都可以解决所有谜题。

Program Name: wisdom

Input

第一行 两个整数M、N。

接下来M行 每行为一个N位的个01串,表示一个手下能否解决某一个问题,0表示不能够解决,1表示能够解决。

Output

一个整数,表示最少的手下个数。如果无论来多少个手下都不能够打开智慧之门,输出"No answer!"(不包括引号)。

Sample

Input

Output

5 4

1111

1001

0111

1011

1101

3

Limit

M<=100;

N<=12。

Hint

如果只有两个手下,由于第二个和第四个手下都不能解决谜题2,所以不一定能够打开智慧之门,而任意三个手下在一起都可以打开,所以输出3。

我的代码是:

#include <stdio.h>]
#include<iostream.h>
int main()
{int i,j,M=5,N=4,k=0,p=0;
char a[100][100];
scanf("%d %d",&M,&N);
for(i=0;i<M;i++)
{for(j=0;j<N;j++)
scanf("%c",&a[i][j]);}
i=0;j=0;
for(i;i<N;i++)
{for(j;j<M;j++)
{if(a[j][i]-48==0)
p++;}
if(p>0)
{k++;
p=0;}
}
printf("%d",k);
system("pause");
return 0;
}

我的代码哪里出了问题啊,还有能不能帮我解决这个问题啊

最佳答案
  • 五星知识达人网友:雪起风沙痕
  • 2021-07-25 20:10

问题1数据输入部分 改成


for(i=0;i<M;i++)
{for(j=0;j<N;j++)
scanf("%c",&a[i][j]);


fflush(stdin); //加上这个把每行后的回车清掉


}



问题2求K.的部分:改为


for(i=0;i<N;i++)
{for(j=0;j<M;j++) //没有j=0的或,只查询了第0列。进入i=1列循环时,j的初始值为M,没有对每一行判断
{if(a[j][i]-48==0)
p++;}
if(p>0)
{k++;
p=0;}
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯