18 条题解

  • 14
    @ 2023-3-26 20:50:06

    P1010 期中考试

    题目描述

    为了提高教学水平,图灵学院进行期中考试,总共会有K次考试 ,星宇博士都会根据 N 名同学的表现给他们进行打分。之后,他对这些排名的一致性产生了好奇。如果一名同学在每次考试中得分都不低于另一名,则称这对学生是一致的

    请帮助星宇博士计算一致的同学的对数。


    思路

    1.先输入一个二维数组,用来保存得分。

    int a[30][30];
    
        cin >> k >> n;
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= k;j++)
            {
                cin >> a[i][j];
            }
        }
    

    2.循环找相同

    3.如果每一次考试都是i的成绩不低于j,+1。

    for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= n;j++)
            {
                if(i == j)
                {
                    continue;
                }
                bool big = 1;
                for(int h = 1;h <= k;h++)
                {
                    if(a[j][h] > a[i][h])
                    {
                        big = 0;
                        break;
                    }
                }
                if(big)
                {
                    ans++;
                }
            }
        
        }
    

    4.输出

    cout << ans;
    

    注意:

    1.如果枚举到同一个同学时候需要跳过


    参考代码

    #include <iostream>//hetao3097453
    using namespace std;
    int a[30][30];
    int k,n,ans;
    int main()
    {
        cin >> k >> n;
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= k;j++)
            {
                cin >> a[i][j];
            }
        }
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= n;j++)
            {
                if(i == j)
                {
                    continue;
                }
                bool big = 1;
                for(int h = 1;h <= k;h++)
                {
                    if(a[j][h] > a[i][h])
                    {
                        big = 0;
                        break;
                    }
                }
                if(big)
                {
                    ans++;
                }
            }
        
        }
        cout << ans;
        return 0;
    }
    

    hetao3097453(B@一钩出站)

    2023年3月26日

  • 7
    @ 2023-10-29 14:59:37

    C2每课一题解(第四课 第一题)!!!

    这题需用枚举做法。

    话不多说,上代码!

    AC Code

    #include <bits/stdc++.h>
    using namespace std;
    int n, k, a[25][15], ans; 
    int main()//hetao5422877
    {
        cin >> k >> n;
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= k; j++)
            {
                cin >> a[i][j];
            }
        }
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(j == i)
                {
                    continue;
                }  
                bool flag = true;
                for(int x = 1; x <= k; x++)
                {
                    if(a[i][x] < a[j][x])
                    {
                        flag = false;
                        break;
                    }
                }
                if(flag==true)
                {
                    ans++;
                }
            }
        }
        cout << ans << endl;
        return 0;
    }
    
    • @ 2024-4-10 22:06:49
      #include <bits/stdc++.h>
      using namespace std;
      int n, k, a[25][15], ans;
      int main()
      {
          cin >> k >> n;
          for (int i=1; i<=n; i++)
          {
              for (int j=1; j<=k; j++)
              {
                  cin >> a[i][j];
              }
          }
          for (int i=1; i<=n; i++)
          {
              for (int j=1; j<=n; j++)
              {
                  if (j==i)
                  {
                      continue;
                  }
                  bool flag = 1;
                  for (int x=1; x<=k; x++)
                  {
                      if (a[i][x] < a[j][x])
                      {
                          flag=0;
                          break;
                      }
                  }
                  if (flag)
                  {
                      ans++;
                  }
              }
          }
          cout << ans << endl;
          return 0;
      }//你那个AC不了
      
  • 7
    @ 2023-7-26 17:03:32

    -题目回顾-

    为了提高教学水平,图灵学院进行期中考试,总共会有K次考试 ,星宇博士都会根据N名同学的表现给他们进行打分。之后,他对这些排名的一致性产生了好奇。如果一名同学在每次考试中得分都不低于另一名,则称这对学生是一致的。

    请帮助星宇博士计算一致的同学的对数。


    -分析-

    这道题使用二维数组a[25][15],先遍历数组输入成绩,然后进行双层循环循环,比较两者k次的成绩,这里可以定义一个flag变量储存是否(true/false或1/0)最后判断flag是否为true即可


    -代码-

    #include <bits/stdc++.h>
    using namespace std;
    int n, k, a[25][15], ans; 
    int main()//by AGOMG
    {
        cin >> k >> n;
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= k; j++)
            {
                cin >> a[i][j];
            }
        }
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(j == i)
                {
                    continue;
                }  
                bool flag = 1;
                for(int x = 1; x <= k; x++)
                {
                    if(a[i][x] < a[j][x])
                    {
                        flag = 0;
                    }
                }
                if(flag)
                {
                    ans++;
                }
            }
        }
        cout << ans << endl;
        return 0;
    }
    
    • @ 2023-8-6 21:42:59

      你在flag=0;下面加个break可以降低时间复杂度

  • 6
    @ 2023-6-10 20:21:22

    我可能是唯一j从i+1开始遍历的题解了awa

    至少是第一个

    先嵌套循环输入数据,并写好遍历比较答案输出代码~

    #include<iostream>
    using namespace std;
    int k,n,a[21][11],ans;
    int main(){
        cin>>k>>n;
        for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)cin>>a[i][j];
        for(int i=1;i<=n-1;i++)for(int j=i+1;j<=n;j++)if(check(i,j))ans++;
        cout<<ans;
        return 0;
    }
    

    然后开始编写check()函数~

    首先对于每一对学生,我们考虑以下三种情况:

    1. x学生第一次考试比y学生高,则这两名学生“一致”相当于x学生每一次考试都不低于y学生
    2. x学生第一次考试比y学生低,则相当于情况1中的x,y两名学生对调
    3. x学生第一次考试与y学生同分,则相当于x学生每一次都不低于y学生或y学生每一次都不低于x学生,即1,2两种情况的综合

    因此函数应如下

    bool equal_check(int x,int y){
        for(int i=2;i<=k;i++)if(a[y][i]<a[x][i])return false;
        return true;
    }
    
    bool check(int x,int y){
        if(a[x][1]==a[y][1])if(equal_check(x,y))return true;
        if(a[x][1]<a[y][1])swap(x,y);
        for(int i=2;i<=k;i++)if(a[x][i]<a[y][i])return false;
        return true;
    }
    

    在情况1或情况2下,均进行判断,若不成立便返回false并终止,否则返回true 在情况3下,若x学生每一次都不低于y学生成立或y学生每一次都不低于x学生成立,均会返回true,否则返回false

    试过啦,可以AC的~

    记得点个赞哦~qq啦

    • 4
      @ 2023-5-2 19:25:39

      因为老师要求,本体题解仅包含核心代码,望理解

      本题数据范围不大,可以用暴力枚举 因为每一门学科都要超过另一个学生,可以用循环遍历每一种情况,遇到相同的人就跳过 每一次比较时,可以用布尔值和循环,不用写太多的if语句

      核心代码如下

      	for(int i = 1;i <= n;i++){
      		for(int j = 1;j <= n;j++){//不能将这里的1换成i,因为同一对人要比较两次
                  bool flag = true;
      			if(i == j)
      			    continue;
      			for(int p = 1;p <= k;p++){
      				if(imfor[i][p] < imfor[j][p]){
      					flag =  false;
      				}
      			}
      			if(flag)
      			    sum++;
      	    }
          }
      
      • 3
        @ 2023-2-28 15:16:22
        思路 根据题目条件可以按照以下步骤完成此题
        step 1:输入每位同学得分
        step2:双重循环枚举出两个同学i和j,注意如果枚举到同一个同学时候需要continue跳过
        step3:内层枚举每一次考试,如果每一次考试都是i的成绩不低于j,将ans++;可以借助flag完成查找
        step4:输出ans;
        难点在于step2和3.
        代码
        
        #include <bits/stdc++.h>
        using namespace std;
        int a[22][12];
        int n, k, ans;
        int main()
        {
            cin >> k >> n;
            for (int i = 1; i <= n; i++ )
                for (int j = 1; j <= k; j++ )
                    cin >> a[i][j];
            for (int i = 1; i <= n; i++ )
            {
                for (int j = 1; j <= n; j++ )
                {
                    if (i == j) continue;
                    bool flag = 1;
                    for (int x = 1; x <= k; x++ )
                    {
                        if (a[i][x] < a[j][x])
                        {
                            flag = 0;
                            break;
                        }
                    }
                    if (flag)
                        ans++ ;
                }
            }
            cout << ans;
        }
        
        
        • 2
          @ 2024-6-2 11:51:49

          P1010 期中考试

          题目描述

          为了提高教学水平,图灵学院进行期中考试,总共会有K次考试 ,星宇博士都会根据 N 名同学的表现给他们进行打分。之后,他对这些排名的一致性产生了好奇。如果一名同学在每次考试中得分都不低于另一名,则称这对学生是​一致的​。

          请帮助星宇博士计算一致的同学的对数。

          思路 1.先来一个二维数组,用来保存同学们的得分,在定义一个ans,来保存最后答案。

          int n, k, a[25][15], ans;
          

          2.输入同学们的得分

          cin >> k >> n;
              for(int i = 1; i <= n; i++){
                  for(int j = 1; j <= k; j++){
                      cin >> a[i][j];
                  }
              }
          

          3.循环枚举,找出一致的同学。

          for(int i = 1; i <= n; i++){
                  for(int j = 1; j <= n; j++){
                      if(j == i) continue; 
                      bool flag = 1;
                      for(int x = 1; x <= k; x++){
                          if(a[i][x] < a[j][x]){
                              flag = 0;
                          }
                      }
                      if(flag){
                          ans++;
                      }
                  }
              }//注意!相同的同学不用枚举
          

          4.输出ans。

          cout << ans << endl;
          return 0;
          

          思路就是这样,代码如下:

          #include <bits/stdc++.h>
          using namespace std;
          int n, k, a[25][15], ans; 
          int main()
          {
              cin >> k >> n;
              for(int i = 1; i <= n; i++){
                  for(int j = 1; j <= k; j++){
                      cin >> a[i][j];
                  }
              }
              for(int i = 1; i <= n; i++){
                  for(int j = 1; j <= n; j++){
                      if(j == i) continue; 
                      bool flag = 1;
                      for(int x = 1; x <= k; x++){
                          if(a[i][x] < a[j][x]){
                              flag = 0;
                          }
                      }
                      if(flag){
                          ans++;
                      }
                  }
              }
              cout << ans << endl;
              return 0;
          }
          

          制作不易,只求点赞❤️

          • 0
            @ 2024-5-19 16:30:22
            #include<bits/stdc++.h>//hetao757380
            using namespace std;
            int a[50][50];
            int s,n,sum = 0;
            int main()
            {
                cin >> s >> n;
                for(int i = 1;i <= n;i++)
                {
                    for(int j = 1;j <= s;j++)
                    {
                        cin >> a[i][j];
                    }
                }
                for(int i = 0;i <= n;i++)
                {
                    for(int j = 1;j <= n;j++)
                    {
                        if(i == j)
                        {
                            continue;
                        }
                        bool flag = 1;
                        for(int h = 1;h <= s;h++)
                        {
                            if(a[j][h] > a[i][h])
                            {
                                flag = 0;
                            }
                        }
                        if(flag)
                        {
                            sum++;
                        }    
                    }
                }
                cout << sum;
                return 0;
            }
            
            • -1
              @ 2024-3-30 8:14:37
              #include <bits/stdc++.h>
              using namespace std;
              int a[30][30];
              int k,n,ans;
              int main()
              {
                  cin >> k >> n;//输入和k和n
                  for(int i = 1;i <= n;i++)
                  {
                      for(int j = 1;j <= k;j++)
                      {
                           cin >> a[i][j];//用双重循环输入a[i][j]
                      }
                  }
                  for(int i = 1;i <= n;i++)
                  {
                      for(int j = 1;j <= n;j++)
                      {
                          if(i == j)//判断i是不是等于j
                          {
                              continue;//如果是,则结束当前循环
                          }
                         bool big = 1;//定义一个布尔变量big为1
                         for(int h = 1;h <= k;h++)
                         {
                              if(a[j][h] > a[i][h])//判断a[j][h] 是不是大于a[i][h]
                              {
                                   big = 0;//如果是,则big = 0,且结束寻环
                                   break;
                              }
                              if(big)//判断big
                              {
                                  ans++;//如果big为真,则ans加1
                              }
                        }
                  }
                  cout << ans;
                  return 0;
              }
              
              • -1
                @ 2024-1-26 17:14:18
                #include <bits/stdc++.h>
                using namespace std;
                int k,n,a[30][30],num=0;
                int main()
                {
                    cin>>k>>n;
                    for(int i=1;i<=n;i++)
                    {
                        for(int j=1;j<=k;j++)
                        {
                            cin>>a[i][j];
                        }
                    }
                    for(int i=1;i<=n;i++)
                    {
                        for(int j=1;j<=n;j++)
                        {
                            if(i==j)
                            {
                                continue;
                            }
                            bool sop=1;
                            for(int l=1;l<=k;l++)
                            {
                                if(a[j][l]>a[i][l])
                                {
                                    sop=0;
                                    break;
                                }
                            }
                            if(sop)
                            {
                                num++;
                            }
                        }
                    }
                    cout<<num;
                    return 0;
                }
                
                • -1
                  @ 2024-1-26 12:39:45
                  #include <bits/stdc++.h>
                  using namespace std;
                  int k,n,a[30][30],num=0;
                  int main()
                  {
                      cin>>k>>n;
                      for(int i=1;i<=n;i++)
                      {
                          for(int j=1;j<=k;j++)
                          {
                              cin>>a[i][j];
                          }
                      }
                      for(int i=1;i<=n;i++)
                      {
                          for(int j=1;j<=n;j++)
                          {
                              if(i==j)
                              {
                                  continue;
                              }
                              bool sop=1;
                              for(int l=1;l<=k;l++)
                              {
                                  if(a[j][l]>a[i][l])
                                  {
                                      sop=0;
                                      break;
                                  }
                              }
                              if(sop)
                              {
                                  num++;
                              }
                          }
                      }
                      cout<<num;
                      return 0;
                  }
                  
                  • -1
                    @ 2024-1-6 17:26:52
                    #include <iostream>
                    using namespace std;
                    int a[30][30];
                    int k,n,ans;
                    int main()
                    {
                        cin >> k >> n;
                        for(int i = 1;i <= n;i++)
                        {
                            for(int j = 1;j <= k;j++)
                            {
                                cin >> a[i][j];
                            }
                        }
                        for(int i = 1;i <= n;i++)
                        {
                            for(int j = 1;j <= n;j++)
                            {
                                if(i == j)
                                {
                                    continue;
                                }
                                bool big = 1;
                                for(int h = 1;h <= k;h++)
                                {
                                    if(a[j][h] > a[i][h])
                                    {
                                        big = 0;
                                        break;
                                    }
                                }
                                if(big)
                                {
                                    ans++;
                                }
                            }
                        
                        }
                        cout << ans;
                        return 0;
                    }
                    
                    • -1
                      @ 2023-8-6 21:44:29
                      #include <iostream>
                      using namespace std;
                      int main(){
                          int n,k,a[100][100],cnt=0;
                          bool flag;
                          cin>>k>>n;
                          for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)cin>>a[i][j];
                          for(int i=1;i<=n;i++){
                              for(int j=1;j<=n;j++){
                                  if(i==j)continue;
                                  flag=true;
                                  for(int l=1;l<=k;l++){
                                      if(a[i][l]<a[j][l]){
                                          flag=false;
                                          break;
                                      }
                                  }
                                  if(flag)cnt++;
                              }
                          }
                          cout<<cnt<<endl;
                          return 0;
                      }
                      
                      • -1
                        @ 2023-8-6 19:55:25
                        #include <iostream>
                        using namespace std;
                        int n, h, a[100][20], ans; 
                        int main()
                        {
                            cin >> h >> n;
                            for(int i = 1; i <= n; i++)
                            {
                                for(int j = 1; j <= h; j++)
                                {
                                    cin >> a[i][j];
                                }
                            }
                            for(int i = 1; i <= n; i++)
                            {
                                for(int j = 1; j <= n; j++)
                                {
                                    if(j == i)
                                    {
                                        continue;
                                    }  
                                    bool flag = 1;
                                    for(int x = 1; x <= h; x++)
                                    {
                                        if(a[i][x] < a[j][x])
                                        {
                                            flag = 0;
                                        }
                                    }
                                    if(flag)
                                    {
                                        ans++;
                                    }
                                }
                            }
                            cout << ans << endl;
                            return 0;
                        }
                        
                        • -3
                          @ 2024-6-16 21:41:16
                          #include <iostream>//hetao3097453
                          using namespace std;
                          int a[30][30];
                          int k,n,ans;
                          int main()
                          {
                              cin >> k >> n;
                              for(int i = 1;i <= n;i++)
                              {
                                  for(int j = 1;j <= k;j++)
                                  {
                                      cin >> a[i][j];
                                  }
                              }
                              for(int i = 1;i <= n;i++)
                              {
                                  for(int j = 1;j <= n;j++)
                                  {
                                      if(i == j)
                                      {
                                          continue;
                                      }
                                      bool big = 1;
                                      for(int h = 1;h <= k;h++)
                                      {
                                          if(a[j][h] > a[i][h])
                                          {
                                              big = 0;
                                              break;
                                          }
                                      }
                                      if(big)
                                      {
                                          ans++;
                                      }
                                  }
                              
                              }
                              cout << ans;
                              return 0;
                          }
                          
                          • -3
                            @ 2024-6-11 21:40:11

                            这道题思路如下: 1,先定个二维数组 2.循环找相同 3.如果每一次考试都是i的成绩不低于j,+1。 4.输出 代码如下

                            #include <iostream> using namespace std; int a[30][30]; int k,n,ans; int main() { cin >> k >> n; for(int i = 1;i <= n;i++) { for(int j = 1;j <= k;j++) { cin >> a[i][j]; } } for(int i = 1;i <= n;i++) { for(int j = 1;j <= n;j++) { if(i == j) { continue; } bool x = 1; for(int h = 1;h <= k;h++) { if(a[j][h] > a[i][h]) { big = 0; break; } } if(big) { ans++; } }

                            }
                            cout << ans;
                            return 0;
                            

                            }

                            • -3
                              @ 2024-3-11 19:49:50

                              #include <iostream> using namespace std; int a[30][30]; int k,n,ans; int main() { cin >> k >> n; for(int i = 1;i <= n;i++) { for(int j = 1;j <= k;j++) { cin >> a[i][j]; } } for(int i = 1;i <= n;i++) { for(int j = 1;j <= n;j++) { if(i == j) { continue; } bool big = 1; for(int h = 1;h <= k;h++) { if(a[j][h] > a[i][h]) { big = 0; break; } } if(big) { ans++; } }

                              } cout << ans; return 0;

                              }

                              • -14
                                @ 2023-6-3 17:35:13

                                **#include <iostream>//hetao3097453 using namespace std; int a[30][30]; int k,n,ans; int main() { cin >> k >> n; for(int i = 1;i <= n;i++) { for(int j = 1;j <= k;j++) { cin >> a[i][j]; } } for(int i = 1;i <= n;i++) { for(int j = 1;j <= n;j++) { if(i == j) { continue; } bool big = 1; for(int h = 1;h <= k;h++) { if(a[j][h] > a[i][h]) { big = 0; break; } } if(big) { ans++; } }

                                }
                                cout << ans;
                                return 0;
                                

                                }**

                                • 1

                                信息

                                ID
                                34
                                时间
                                1000ms
                                内存
                                256MiB
                                难度
                                5
                                标签
                                递交数
                                3843
                                已通过
                                1383
                                上传者