计算机考研复试_牛客_KY2~KY3

KY2——成绩排序

题目描述

查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
示例:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96

输入描述:

注意一个case里面有多组样例,请用循环处理输入
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例1

输入
3
0
fang 90
yang 50
ning 70
输出
fang 90
ning 70
yang 50

题解

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct Student {
    int id;
    string name;
    int score;
    Student(int id, string name, int score):id(id),name(name),score(score){}
};

bool less_fun(Student a, Student b){
    return a.score == b.score ? a.id < b.id : a.score < b.score;
}
bool greater_fun(Student a, Student b){
    return a.score == b.score ? a.id < b.id : a.score > b.score;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    vector<Student> arr;
    while(cin>>n){
        arr.clear();
        int mode;
        cin>>mode;
        for(int i=0;i<n;i++){
            string name;
            int score;
            cin>>name>>score;
            Student temp = Student(i, name, score);
            arr.push_back(temp);
        }
        if(mode)
            sort(arr.begin(), arr.end(), less_fun);
        else
            sort(arr.begin(), arr.end(), greater_fun);
        for(int i=0;i<n;i++){
            cout<<arr[i].name<<' '<<arr[i].score<<endl;
        }
    }
    return 0;
}

KY3——约数的个数

题目描述

输入n个整数,依次输出每个数的约数的个数

输入描述:

输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)

输出描述:

可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。

示例1

输入
5
1 3 4 6 12
输出
1
2
3
4
6

思路

素数打表

题解

#include <stdio.h>
#include <string.h>

bool isPrime[100007];
int prime[50007];

void initPrime(){
    int cnt = 0;
    memset(isPrime, 1, 50001);
    isPrime[1] = false;
    for(int i=2;i<=50000;i++){
        if(isPrime[i] == true) {
            for(int j=2;i*j<50000;j++){
                isPrime[i*j] = false;
            }
            prime[cnt++] = i;
        }
    }
}

int main(){
    initPrime();
    int cnt;
    scanf("%d", &cnt);
    while(cnt--){
        int num, ans=1;
        scanf("%d", &num);
        for(int i=0;prime[i]*prime[i]<=num;i++) {
            int k = 1;
            while(num%prime[i]==0){
                // printf("%d %d\n", cnt, num);
                k++;
                num /= prime[i];
            }
            ans *= k;
        }
        if(num != 1) ans *= 2;
        printf("%d\n", ans);
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 北邮OJ不让上了,可能快复试的原因 排序用 冒泡 一次定一个数的位置 i=0;i<n;i++j=n-1;j>i;j...
    0be47bf15d8d阅读 3,118评论 0 0
  • 题目描述 查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列...
    小路子好阅读 3,161评论 0 0
  • 题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排...
    IceFrozen阅读 3,688评论 0 0
  • 看一个题:查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列...
    zengfan阅读 10,680评论 1 2
  • 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规...
    RockyLuo_290f阅读 1,150评论 0 0