1266谁是冠军(重写的)

/*
 ============================================================================
 Name        : 1266.c
 Author      : FnLock
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

//  创建一个学生结构
//  其中有:
//  解题数目  解题时间
typedef struct College_Program_Design_Contest {
    int problem;
    int time;
} student;
void myscanf(student *arr,int n);
void mysort(student *arr,int n);
void arrsort(student *arr,int a,int b);
int main(void) {
    int n;
    int i;
    //  输入有几个同学
    scanf("%d",&n);
    //  创建一个student形数组的指针用于储存输入的数据
    student *arr = (student *)malloc( n*sizeof(student));
    //  input student data
    myscanf(arr,n);
    //  对其进行排序
    mysort(arr,n);
    /* 
    for(i=0; i<n; i++)
    {
        printf("problem = %i ; time = %i \n",arr[i].problem,arr[i].time);

    }
    puts("Hello world!");
    */ 
    printf("%i %i",arr[i].problem,arr[i].time);
    return EXIT_SUCCESS;
}

void myscanf(student *arr,int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        scanf("%i %i",&arr[i].problem,&arr[i].time);
    }
}

//  他可以对其进行全部排名
void mysort(student *arr,int n)
{
    int i,j; 
    //  先按解决问题数排序
    for(i=0; i<n-1; i++)
    {
        for(j=i; j<n; j++)
        {
            if( arr[j].problem>arr[i].problem )
            {
                //  定义一个临时变量
                int temp = arr[i].problem;
                arr[i].problem = arr[j].problem;
                arr[j].problem = temp;
                //  交换problem的同时别忘了带上time
                temp = arr[i].time;
                arr[i].time = arr[j].time;
                arr[j].time = temp;
            }
        }
    }

    /*  我得解释一下  下面写的是什么鬼
     *  首先 当  problem 相同 时
     *  截下来 排序
     *  比如 皮肉不冷为  1 1 1 2 2 2 3 3 3
     *  则  分为三部分     1 1 1^2 2 2^3 3 3
     *  难后对 time 进行排序
     * */
    //  再按解决问题时间排序
    for(i=0; i<n; i++)
    {
        for(j=i; j<n; j++)
        {
            //  解决问题的数量相同
            if(arr[i].problem!=arr[j].problem)
            {
                j--;
                // 选择排序
                arrsort(arr,i,j);
                i=j;
                break;
            }
            //  搞到最后一个了
            else if(j==n-1)
            {
                //  选择排序
                arrsort(arr,i,n-1);
                goto OUT;
            }
        }
    }
    OUT:;
}
void arrsort(student *arr,int a,int b)
{
    int i,j;
    for(i=a; i<b; i++)
    {
        for(j=i; j<b+1; j++)
        {
            if( arr[j].time<arr[i].time )
            {
                int temp = arr[i].time;
                arr[i].time = arr[j].time;
                arr[j].time = temp;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值