近期的刷题
Posted wonzenkei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了近期的刷题相关的知识,希望对你有一定的参考价值。
北京邮电大学计算机院考研复试上机真题:
试题一.找最小数
第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x y。输出一组x y,该组数据是所有数据中x最小,且在x相等的情况下y最小的。
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数对。
输出描述:
输出最小的整数对。
示例1
输入:
5
3 3
2 2
5 5
2 1
3 6
输出:
2 1
2.分析:依据题意可知:本题要求一组数据对中,在列中找出一个最小数,并且在列中保证最小一列的数据中得到相应行的数为最小数。因此,最有效的办法即使用排序进行操作。然而起初虽然我使用了sort排序,但是代码虽然可以通过测试案例,然而无法通过后台的测试用例,后来才得知,需要使用sort利用struct结构体进行排序。
3.执行代码:
#include<bits/stdc++.h>
using namespace std;
struct shuju{
int x;
int y;
}student[1000];//先定义struct结构体,并且在结构体中存放行、列数据
bool compare(shuju b1,shuju b2){\\应注意,使用结构体的sort排序时,不能将该算法直接使用,而是需要将该结构体的compare排序函数另行写出,详情可参见网上struct排序模板
if(b1.x==b2.x){
return b1.y<b2.y;
}
else{
return b1.x<b2.x;
}
}
int main()
{
int n,i;
cin>>n;
for(i=0;i<n;i++){
cin>>student[i].x>>student[i].y;
}
sort(student+0,student+n,compare);//调用struct排序函数,排序完毕之后,直接取第一组行列数据即可!
cout<<student[0].x<<" "<<student[0].y<<endl;
return 0;
}
4.运行正确截图:
试题二.查找第k小数
查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出描述:
输出第k小的整数。
示例1
输入
6
2 1 3 5 2 2
3
输出
3
2.分析:起初想到的是使用排序将一组数据处理完毕,并直接将第k个数字输出即可,然而发现的问题即--一旦有重复数据,就需要考虑到去重条件,因此还需要多加思考!
3.执行代码
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int n,i,a[100];
cin >> n;
for (i = 0; i < n; i++) {
cin >> a[i];
}
sort(a + 0, a + n);
int t;
cin >> t;//输入要查找的第k个小数
{
for (i = 0; i < n; i++) {
if (a[i] != a[i - 1]) {//进行去重,一旦发现后一个与前一个不一样大
t--;//即使用t对数据进行逐个进行递减地标记,例如测试用例中:排序后为122235,第一个数就用t标记为2,第二个数就用t标记为1,第三个数就用t标记为1,往后同理...到第五个数就用t标记为0
if (t == 0) {//到此即符合要查找的第k个数,输出即可
cout<<a[i]<<endl;break;
}
}
}
}
}
4.运行正确截图
试题三.比较奇偶数个数
第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000)。
输出描述:
如果偶数比奇数多,输出NO,否则输出YES。
示例1
输入
5
1 5 2 4 3
输出
YES
2.分析:上机题组中最简单的一试题,严重水题,直接附上代码即可!(ps:Java过题)
3.执行代码
import java.util.Scanner;
public class Main {
private static Scanner in;
public static void main(String[] args) {
in=new Scanner(System.in);
int n,i,x=0,y=0;
int a[]=new int[100];
n=in.nextInt();
for(i=0;i<n;i++) {
a[i]=in.nextInt();
if(a[i]%2==0) {
x++;
}
else {
y++;
}
}
if(x>y) {
System.out.print("NO");
}
else if(x<y||x==y) {
System.out.print("YES");
}
}
}
4.运行正确截图:
总共13个题,能做出来的就3道,其余的10个题还在继续努力钻研中~~,第三题是第五次使用Java过题了,顺带熟悉了Java的基本语法,后期继续加油8,关灯 睡觉(~﹃~)~zZ......
以上是关于近期的刷题的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 前端歌谣的刷题之路-第一百四十七题-三列布局-浮动
火爆Github的刷题攻略,现在配套网站上线了!!力扣刷题网站,刷题路线