CF847G-题解


CF847G 题解

题目分析:

一共有 $n$ 个小组,每个小组都有 7 个课程,有可能有两个或两个以上的小组同时上课,但是一个教室只可以装下一个小组,问你如果要让所有小组都可以在教室上课,一共需要多少个教室?

上面的描述可能理解起来比较复杂,下面我来把他简化一下:

一共有 $n$ 行,每行7个数,让你求那一列的“1”最多,输出他的数量。

这样就很简单了,如果你还是不理解,可以继续看下面(会的话可以跳过下面这一段):

比如样例二:

一共 $n$ 个小组(用√表示要上课)

第1节课 第2节课 第3节课 第4节课 第5节课 第6节课 第7节课
小组1
小组2
小组3

我们可以发现,第七节课要上课的小组最多,有三个,所以输出是 3

题目难度:

个人认为是 入门 难度左右。

题目做法:

我的代码可能比其他大佬写的题解的代码要慢一点,但是跟好理解一点。

首先,当然是输入一个 $n$ 和 $n$ 行字符数组(我比较喜欢用字符数组,其实字符串也没问题):

   scanf("%d",&n);
   for(i=1;i<=n;++i){ //输入 n 行
      cin>>ch[i];  //也可以用 scanf,但要注意是‘%s’
   }

输入之后,我们要用一个二维数组,来枚举每一列,用max1来记录最大值,代码如下:

   for(i=0;i<=7;++i){ //枚举 7 列
      for(j=0;j<=n;++j){ //枚举 n 行
         if(ch[j][i]=='1') sum++; //如果是‘1’就累加
      }
      if(sum>max1) max1=sum; //如果大于了之前的最大值,则把 sum 赋给 max1
      sum=0; //记住每个循环之后要清 0
   }

最后,就是输出了,就一个数,很简单。

   printf("%d",max1); //输出

完整代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,i,j,max1=-1,sum; //max1 刚开始是要定义为 -1
char ch[1001][8]; //n 的最大值为 1000
int main(){
   scanf("%d",&n); //输入 n 行
   for(i=1;i<=n;++i){
      cin>>ch[i]; //也可以用 scanf,但要注意是‘%s’
   }
   for(i=0;i<=7;++i){ //枚举 7 列
      for(j=0;j<=n;++j){ //枚举 n 行
         if(ch[j][i]=='1') sum++; //如果是‘1’就累加
      }
      if(sum>max1) max1=sum; //如果大于了之前的最大值,则把 sum 赋给 max1
      sum=0; //记住每个循环之后要清 0
   }
   printf("%d",max1); //输出
}

希望本题解对大家有帮助,也感谢管理员在百忙之中抽空为我审核题解,谢谢!


文章作者: Andysun06
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Andysun06 !
 上一篇
testlib.h库用法教程 testlib.h库用法教程
关于testlib.h库,详见这里 相信大家看了之后,会很想试试看什么效果,小编也是这样,于是试了一下,并把操作方法和注意事项写在了这里,希望对大家有帮助! 第一步:在桌面新建一个文本文档,命名为:testlib 注意事项: 不要带后缀
2020-06-06
下一篇 
CF110B-题解 CF110B-题解
CF110B 题解这题居然没有 Pascal 的题解,那我就写一篇吧。 题目翻译&做法分析:给定一个数 $n$ 让你输出满足这三个条件的字符串: 整个字符串都由小写字母组成; 两个相同字母之间的距离为 4 或 7。 在满足以上条件
2020-05-02
  目录