全部评论 7

  • 你的代码有几个小问题和改进的地方。根据题目的要求,以下是一个修正和改进后的版本:

    函数 jntm 的返回值:这个函数在比较两个对象时,应该是返回一个 bool 值。你的代码缺少了 return 语句,可能会导致未定义的行为。

    确定最终面试名单的筛选:在计算面试分数线后,你需要筛选出所有分数高于或等于此分数线的选手,而不仅仅是前 m * 1.5 名选手。

    输出逻辑:需要输出所有从 S 到 T 的选手的情况,而不是仅仅前 m * 1.5 名选手。

    以下是修正后的代码:
    #include<bits/stdc++.h>
    using namespace std;

    struct people {
    int id, score;
    };

    bool compare(people x, people y) {
    if (x.score != y.score)
    return x.score > y.score; // 降序
    else
    return x.id < y.id; // 升序
    }

    int main() {
    int n, m;
    cin >> n >> m;
    vector<people> a(n);

    for(int i = 0; i < n; i++)
        cin >> a[i].id >> a[i].score;
    
    // 排序
    sort(a.begin(), a.end(), compare);
    
    // 计算面试分数线
    int cut_off_index = floor(m * 1.5); // 向下取整
    int cut_off_score = a[cut_off_index - 1].score;
    
    // 筛选进入面试的选手
    vector<people> qualified;
    for (const auto& person : a) {
        if (person.score >= cut_off_score)
            qualified.push_back(person);
    }
    
    // 输出结果
    cout << cut_off_score << " " << qualified.size() << endl;
    for (const auto& person : qualified) {
        cout << person.id << " " << person.score << endl;
    }
    
    return 0;
    

    }
    代码说明:
    结构体定义:people 结构体用于存储选手的报名号和分数。
    比较函数:compare 函数用来比较两名选手,按照分数降序、报名号升序的规则进行排序。
    读取输入:使用 cin 读取选手的报名号和分数,并存入 vector<people> 中。
    排序:调用 sort 函数对选手进行排序。
    计算分数线:依据公式计算分数线,并获取分数线的确切分数。
    筛选合格选手:筛选出所有分数高于或等于分数线的选手。
    输出结果:输出分数线和合格选手的信息。
    注意事项:
    确保使用 floor 进行取整,可以通过将乘法转换为整数后再进行除法来避免浮点数精度问题。
    输入和输出的格式需严格遵循题目的要求,以便于测试和验证

    2024-10-26 来自 江苏

    0
  • #include <stdio.h>
    void sort(int a[],int b[],int n){
    	int i,j,t,tt;
    	for(i = 0; i < n-1; i++)
    	{
    		for(j = 0; j < n-i-1; j++)
    		{
    			if(b[j] < b[j+1] || (b[j] == b[j+1] && a[j] > a[j+1]))
    			{
    				t = b[j]; tt = a[j];
    				b[j] = b[j+1]; a[j] = a[j+1];
    				b[j+1] = t; a[j+1] = tt;
    			}
    		}
    	}
    	
    }int main(){
    	int n,m,mm;
    	scanf("%d %d",&n,&m);
    	int i,s = 0,fen;
    	int a[5000],b[5000];
    	mm=m*1.5;
    	for(i = 0; i < n; i++){
    		scanf("%d %d",&a[i],&b[i]);
    	}sort(a,b,n);
    	fen = b[mm-1];
    	for(i = 0; i < n; i++){
    		if(b[i]>=fen)
    		s++;
    	}
    	printf("%d %d\n",fen,s);
    	for(i = 0; i < s; i++)
    	{
    		printf("%d %d\n",a[i],b[i]);
    	}
    	
    	return 0;
    }
    

    2024-08-30 来自 山东

    0
  • 这是AI说的

    2024-03-02 来自 浙江

    0
  • 3.先输出面试分数线和实际进入面试的选手人数,然后按要求输出这些选手的信息。

    2024-03-02 来自 浙江

    0
  • 2.面试分数线line的确定:根据排名第m*1.5(向下取整)的选手的成绩确定面试分数线。

    2024-03-02 来自 浙江

    0
  • 1.计算t时的调整
    原代码中,t=m1.5+1;可能会导致错误的分数线计算。正确的应该是(int)(m * 1.5) - 1;,因为我们需要的是排名m1.5(向下取整)的选手的成绩作为分数线,而数组下标是从0开始的,所以需要减1。

    2024-03-02 来自 浙江

    0
  • 如果分数一样的话,就得都输出,而不是只输出前m*1.5个,不然如果id大的但过分数线的就不会被进入面试,很不公平()

    2024-02-17 来自 广东

    0

热门讨论