zoukankan      html  css  js  c++  java
  • 一道简单的题目

    Hello,大家好

    又到了人民群众喜闻乐见的博客分享时间

    今天我们要讲的是:

    ████(来源未知):监考老师这道题

     

    先上题目描述

     

    2.监考老师(teacher.cpp/in/out)

     

     

     
    问题描述

     

    在一个大试场里,有 n 行 m 列的考生,小王和众多同学正在考试,这时,有一部分考生

     

    作弊,当然,监考老师能发现他们。但是只有一个监考老师,他由于高度近视,只能发现与

     

    他同行同列的作弊者,而且由于监考老师年老体弱,在考试过程中无法移动。现在已知 n*m

     

    个考生中谁在作弊,请帮监考老师找一个位置,可以发现最多的作弊者(监考老师可以和某

     

    个考生在同一位置)。如果监考老师的位置上的考生在作弊,那么监考老师先前后看,发现

     

    他作弊,再左右看,又发现他作弊,算做发现 2 个考生作弊。
    (需要文件输入输出)

     

    输入格式

     

    第一行两个数 n,m ,表示试场是 n*m 的,接下来是 n*m 的矩阵,1 表示作弊,0 表示不作

     

    弊。

     

    输出格式

     

    共一行,一个数,表示最多可以发现多少作弊者。

     

    样例输入

     

    5 5

     

    0 0 1 0 0

     

    0 0 1 0 0

     

    1 1 1 1 1

     

    0 0 1 0 0

     

    0 0 1 0 0

     

    样例输出

     

    10

     

    样例说明

     

    监考老师在最中间,那个位置上的作弊者算作 2 次。
     
    数据范围
    对于 50 %的数据,0<n,m<=10
    对于 100 %的数据,0<n,m<=100,所有数据都在 longint 范围内
     
     
    这道题……
     
    是最简单的
     
    老师打的是0个*
     
    意思就是说:老师只能看到同行同列的学生,同一个位置上的学生如果作弊算2次
    最后这条很重要!!(无故剧透[滑稽])
     
    那么这样,我们就可以开始推断了
     
    首先先搭框架
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int main()
     5 {
     6     
     7     
     8     
     9     return 0;
    10 }

    虽然这道题数据小,也不用非得C语言scanf/printf在那挤时间了

    但是,cstdio还是得加

    因为需要文件输入输出

    不加的话……

    那之后……就不难了

    我们只要输入地图

     1 void teacher(int n,int m)
     2 {
     3     int max=0,max1=0,max2=0,max3=0;
     4     scanf("%d%d",&n,&m);
     5     for(int i=1;i<=n;i++)
     6     {
     7         for(int j=1;j<=m;j++)
     8         {
     9             scanf("%d",&a[i][j]);
    10         }
    11     }
    12 }

    再找出哪一列的作弊人数最多

     1 void teacher(int n,int m)
     2 {
     3     int max=0,max1=0,max2=0,max3=0;
     4     scanf("%d%d",&n,&m);
     5     for(int i=1;i<=n;i++)
     6     {
     7         for(int j=1;j<=m;j++)
     8         {
     9             scanf("%d",&a[i][j]);
    10         }
    11     }
    12     for(int j=1;j<=m;j++)
    13     {
    14         int sum=0;
    15         for(int i=1;i<=n;i++)
    16         {
    17             if(a[i][j]==1)
    18             {
    19                 sum++;
    20             }
    21         }
    22         if(sum>max)
    23         {
    24             max=sum;
    25             max1=j;
    26         }
    27     }
    28 }

    再找出哪一行作弊的人最多

     1 void teacher(int n,int m)
     2 {
     3     int max=0,max1=0,max2=0,max3=0;
     4     scanf("%d%d",&n,&m);
     5     for(int i=1;i<=n;i++)
     6     {
     7         for(int j=1;j<=m;j++)
     8         {
     9             scanf("%d",&a[i][j]);
    10         }
    11     }
    12     for(int j=1;j<=m;j++)
    13     {
    14         int sum=0;
    15         for(int i=1;i<=n;i++)
    16         {
    17             if(a[i][j]==1)
    18             {
    19                 sum++;
    20             }
    21         }
    22         if(sum>max)
    23         {
    24             max=sum;
    25             max1=j;
    26         }
    27     }
    28     for(int i=1;i<=n;i++)
    29     {
    30         int sum=0;
    31         for(int j=1;j<=m;j++)
    32         {
    33             if(a[i][j]==1)
    34             {
    35                 sum++;
    36             }
    37         }
    38         if(sum>max2)
    39         {
    40             max2=sum;
    41             max3=i;
    42         }
    43     }
    44 }

    最后加起来就行了

    注意因为中间那一个作弊的算两次,所以不用减

     1 void teacher(int n,int m)
     2 {
     3     int max=0,max1=0,max2=0,max3=0;
     4     scanf("%d%d",&n,&m);
     5     for(int i=1;i<=n;i++)
     6     {
     7         for(int j=1;j<=m;j++)
     8         {
     9             scanf("%d",&a[i][j]);
    10         }
    11     }
    12     for(int j=1;j<=m;j++)
    13     {
    14         int sum=0;
    15         for(int i=1;i<=n;i++)
    16         {
    17             if(a[i][j]==1)
    18             {
    19                 sum++;
    20             }
    21         }
    22         if(sum>max)
    23         {
    24             max=sum;
    25             max1=j;
    26         }
    27     }
    28     for(int i=1;i<=n;i++)
    29     {
    30         int sum=0;
    31         for(int j=1;j<=m;j++)
    32         {
    33             if(a[i][j]==1)
    34             {
    35                 sum++;
    36             }
    37         }
    38         if(sum>max2)
    39         {
    40             max2=sum;
    41             max3=i;
    42         }
    43     }
    44     cout<<max2+max;
    45 } 

    最后main函数调用一下再加freopen就行了

    完整代码:

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iomanip>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[100][100];
    void teacher(int n,int m)
    {
        int max=0,max1=0,max2=0,max3=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(int j=1;j<=m;j++)
        {
            int sum=0;
            for(int i=1;i<=n;i++)
            {
                if(a[i][j]==1)
                {
                    sum++;
                }
            }
            if(sum>max)
            {
                max=sum;
                max1=j;
            }
        }
        for(int i=1;i<=n;i++)
        {
            int sum=0;
            for(int j=1;j<=m;j++)
            {
                if(a[i][j]==1)
                {
                    sum++;
                }
            }
            if(sum>max2)
            {
                max2=sum;
                max3=i;
            }
        }
        cout<<max2+max;
    } 
    void main()
    {
        freopen("teacher.in","r",stdin);
        freopen("teacher.out","w",stdout);
        int n,m;
        teacher(n,m);
        fclose(stdin);
        fclose(stdout);
        return 0;
    } 

    实测输出正确

    拜了个拜……

     

  • 相关阅读:
    【c# 学习笔记】使用virtual和override关键字实现方法重写
    【c# 学习笔记】多态
    【c# 学习笔记】子类的初始化顺序
    mybatis入门截图二
    解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架自动封装参数的功能
    mybatis入门截图总结
    springMVC入门截图
    OA项目总结3
    修改struts2自定义标签的源代码,在原有基础上增加功能(用于OA项目权限判断,是否显示某个权限)
    ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)
  • 原文地址:https://www.cnblogs.com/wwLucas-Blog-Welcome/p/12910756.html
Copyright © 2011-2022 走看看