/*
============================================================================
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;
}
}
}
}
1266谁是冠军(重写的)
最新推荐文章于 2022-03-18 10:35:00 发布