近期的刷题

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的刷题攻略,现在配套网站上线了!!力扣刷题网站,刷题路线

清华学霸的刷题笔记

#yyds干货盘点# 前端歌谣的刷题之路-第六十四题-查找元素位置前端歌谣的刷题之路-第六十四题-查找元素位置

首师大附中科创教育平台 我的刷题记录 0284 最强大脑

火爆Github的刷题攻略,现在配套网站上线了!!值得一看,从此学习算法不再迷茫