15 条题解
-
10
P1026 谁考了第k名
题目描述
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
思路
结构体部分:
学生的学号和他的成绩两个量,也就是一个int一个double,再定义一个a[105]就可以了。
struct Student { int id; double ach; }a[105];
比较部分:
bool形式,返回是否符合x学生成绩 > y学生成绩。
bool cmp(Student x,Student y) { return x.ach > y.ach; }
把他们整合起来,使用
sort(a + 1,a + n + 1,cmp)
排序,最后输出第k位相关数据就可以了。
参考代码
#include <iostream>//hetao3097453 #include <algorithm> using namespace std; struct Student { int id; double ach; }a[105]; bool cmp(Student x,Student y) { return x.ach > y.ach; } int main() { int n,k; cin >> n >> k; for(int i = 1;i <= n;i++) { cin >> a[i].id >> a[i].ach; } sort(a + 1,a + n + 1,cmp); cout << a[k].id << " " << a[k].ach; return 0; }
hetao3097453
2023年4月29日
-
9
思路
首先是结构体,可以看作一个新种变量同时可以储存多个变量,这里我用int记录学号,double记录分数
struct info{ int num; double mark; }f[105];//建立了一个info类型的数组f,可以同时储存int和double
然后输入。这里记住,调用结构体变量要用成员运算符
for(int i=1;i<=n;i++)cin>>f[i].num>>f[i].mark;//点是调用此结构体变量中储存的变量
最后排序。我用了快排,排序自选,不过不推荐冒排和插排,因为时间复杂度太高了
void quicksort(int l,int r){ int i=l,j=r; if(l>=r)return;//递归边界。当l==r时,此元素已排好;当l>r时,出错结束 while(i!=j){ while(f[i].mark>=f[r].mark&&i<j)i++;//要对比mark,直接对比会出错 while(f[j].mark<=f[r].mark&&i<j)j--; if(i<j)swap(f[i],f[j]);//可以直接交换 } swap(f[r],f[i]); quicksort(l,i-1);//递归 quicksort(i+1,r);//递归 }
最后是
代码!!!(已AC)
#include <iostream> #include <algorithm> using namespace std; struct info{ int num; double mark; }f[105]; void quicksort(int l,int r){ int i=l,j=r; if(l>=r)return; while(i!=j){ while(f[i].mark>=f[r].mark&&i<j)i++; while(f[j].mark<=f[r].mark&&i<j)j--; if(i<j)swap(f[i],f[j]); } swap(f[r],f[i]); quicksort(l,i-1); quicksort(i+1,r); } int main(){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++)cin>>f[i].num>>f[i].mark; quicksort(1,n); cout<<f[k].num<<' '<<f[k].mark<<endl; return 0; }
(点赞抱走)
-
2
难度:一般 难点:结构体排序 等级考试二级真题 代码:
#include <iostream> #include <algorithm> using namespace std; int n, m; struct Student { int id; double chengji; }s[1000]; bool cmp(Student s1, Student s2) { return s1.chengji > s2.chengji; } int main() { cin >> n >> m; for (int i = 0; i < n; i++) { cin >> s[i].id >> s[i].chengji; } sort(s, s + n + 1, cmp); cout << s[m - 1].id << " " << s[m - 1].chengji; return 0; }
制作不易,给个赞吧😄
-
0
题目描述
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
其实这道题和P1025类似,只是多添加了一个判断if (i == k)的过程,可以在源代码的基础上添加即可.
上判断代码的截图:
此题先定义名为Student的结构体,再定义n,k,后写判断:
接下来的主代码即在上方第一张图片.
总代码:
接下来是Visual运行后的结果:
递交后结果是100%AC的:
最后是AC代码,请勿一次性
粘贴吞食,否则会被封号关进小黑屋[doge]代码
#include <bits/stdc++.h> //by Zhao using namespace std; //结构体的定义 struct Student { int id; double score; } s[10086]; //定义整数型变量 int n,k; //书写判断代码,注意x.score的判断!!! bool cmp(Student x,Student y) { if (x.score == y.score) //判断分数相同时小号在前大号在后 return x.id < y.id; return x.score > y.score; } //主函数 int main() { cin >> n >> k; //写入人数及成绩排名第k名的学生 for (int i = 1;i <= n;i++) cin >> s[i].id >> s[i].score; sort(s + 1,s + n + 1,cmp); for (int i = 1;i <= n;i++) { if (i == k) //检验及输出要求的值 cout << s[i].id << " " << s[i].score << endl; } return 0; } 点个赞就可以抱走,感谢😄
-
0
题解 先来定义一个结构体
struct stu { int id; double m; }s[1001];
接着是cmp函数
bool cmp(stu x,stu y) { return x.m>y.m; }
然后就输入,排个序,输出。
cin>>n>>k; for (int i=1;i<=n;i++) cin>>s[i].id>>s[i].m; sort(s+1,s+n+1,cmp); cout<<s[k].id<<" "<<s[k].m;
完整代码
#include <bits/stdc++.h>//hetao3222569 using namespace std; struct stu { int id; double m; }s[1001]; int n,k; bool cmp(stu x,stu y) { return x.m>y.m; } int main() { cin>>n>>k; for (int i=1;i<=n;i++) cin>>s[i].id>>s[i].m; sort(s+1,s+n+1,cmp); cout<<s[k].id<<" "<<s[k].m; return 0; }
-
0
#include <iostream> using namespace std; int main() { double n,k,m=-1; cin>>n>>k; double c[300]; long long x[300]; for (int i=0;i<=n-1;i++) { cin>>x[i]; cin>>c[i]; } for (int j=1;j<=k-1;j++) { m=-1; for (int q=0;q<=n-1;q++) { if (c[q]>m) m=c[q]; } for (int f=0;f<=n-1;f++) { if (c[f]==m) c[f]=-9; } } m=-1; for (int i=0;i<=n-1;i++) { if (c[i]>m) m=c[i]; } int pos; for (int i=0;i<=n-1;i++) { if (c[i]==m) pos=i; } cout<<x[pos]<<" "<<m; return 0; }//方法复杂了亿点点……
-
0
思路:定义一个struct,然后排序
代码:
#include <bits/stdc++.h> using namespace std; struct Stu { // 学号和成绩 int id; float sc; } s[1000]; int n, k; bool cmp(Stu x, Stu y) { return x.sc > y.sc; } int main() { cin >> n >> k; for (int i = 0; i < n; i++) cin >> s[i].id >> s[i].sc; sort(s, s + n, cmp); cout << s[k - 1].id << " " << s[k - 1].sc << endl; return 0; }
-
0
定义结构体,包含学号(int类型)和成绩(double类型),并定义cmp函数,按题目要求排序即可。
代码
#include<bits/stdc++.h>
using namespace std;
struct S { int id; double m; } s[101];
int n, k;
bool cmp(S x, S y) { return x.m > y.m; }
int main() { scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) scanf("%d%lf", &s[i].id, &s[i].m); sort(s + 1, s + n + 1, cmp); cout << s[k].id << " " << s[k].m;
return 0; } -
-1
yasuo👀️
#include <iostream> #include <algorithm> struct stu{int id;float cj;}stud[105]; bool yasuo(stu x,stu y){ if(x.cj!=y.cj)return x.cj>y.cj; return x.id<y.id;} int main(){ int n,m;std::cin>>n>>m; for(int i=0;i<n;i++)std::cin>>stud[i].id>>stud[i].cj; std::sort(stud,stud+n,yasuo); std::cout<<stud[m-1].id<<" "<<stud[m-1].cj<<"\n"; return 0;}
-
-1
运用我们学过的知识 struct 去做
下面是代码⬇️
#include <iostream> #include <algorithm> using namespace std; struct Student { double score; long long id; }; Student a[101]; bool check(Student x,Student y) { return x.score > y.score; } int main() { int n,k; cin >> n >> k; for(int i = 1;i <= n;i++) cin >> a[i].id >> a[i].score; sort(a+1,a+n+1,check); cout << a[k].id << " " << a[k].score; return 0; } 4
-
-1
#include<bits/stdc++.h>//by Chris knowledge using namespace std; struct S { int id; double m; } s[101]; int n, k; bool cmp(S x, S y) { return x.m > y.m; } int main() { scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) scanf("%d%lf", &s[i].id, &s[i].m); sort(s + 1, s + n + 1, cmp); cout << s[k].id << " " << s[k].m; return 0; }
-
-3
简单 #include <iostream> #include <algorithm> using namespace std; struct Student{ int a; double b; } s[105]; int n,k; int cmp(Student x,Student y){ return x.b>y.b; } int main() { cin>>n>>k; for(int i = 1;i<=n;i++) { cin>>s[i].a>>s[i].b; } sort(s+1,s+n+1,cmp); cout<<s[k].a<<" "<<s[k].b; }
-
-3
P1026
-题目回顾-
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
-分析-
重点:使用结构体,定义cmp函数
不要乱开
doulble
所以这里我选择使用float
-代码-
#include <bits/stdc++.h>//by AGOMG(hetao1193656) using namespace std; struct Student{ long id; float grd; }s[1005]; bool cmp(Student a, Student b){ return a.grd > b.grd; } int n, m; int main() { cin >> n >> m; for(int i = 1; i <= n; i++) cin >> s[i].id >> s[i].grd; sort(s + 1, s + n + 1, cmp); cout << s[m].id << ' ' << s[m].grd; return 0; }
-
-6
#include <iostream> #include <algorithm> using namespace std; struct Student { int id; double ach; }a[105]; bool cmp(Student x,Student y) { return x.ach > y.ach; } int main() { int n,k; cin >> n >> k; for(int i = 1;i <= n;i++) { cin >> a[i].id >> a[i].ach; } sort(a + 1,a + n + 1,cmp); cout << a[k].id << " " << a[k].ach; return 0; }
- 1
信息
- ID
- 19
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 2008
- 已通过
- 1015
- 上传者