18 条题解
-
14
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
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; }
-
7
-题目回顾-
为了提高教学水平,图灵学院进行期中考试,总共会有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; }
-
6
我可能是唯一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()
函数~首先对于每一对学生,我们考虑以下三种情况:
x
学生第一次考试比y
学生高,则这两名学生“一致”相当于x
学生每一次考试都不低于y
学生x
学生第一次考试比y
学生低,则相当于情况1中的x
,y
两名学生对调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
因为老师要求,本体题解仅包含核心代码,望理解
本题数据范围不大,可以用暴力枚举 因为每一门学科都要超过另一个学生,可以用循环遍历每一种情况,遇到相同的人就跳过 每一次比较时,可以用布尔值和循环,不用写太多的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
思路
根据题目条件可以按照以下步骤完成此题
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
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
#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
#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
#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
#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
#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
#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
#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
#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
这道题思路如下: 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
#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
**#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
- 上传者