1.前言
Hello大家我又来分享题目咯,本题是来自AtCoder的一道题,具体题目在链接:B - Guidebook
这道题呢说难也不难,也算是对结构体的一个掌握,大家可以先试着做一下,然后可以分享自己的思路在评论区哦,不会的同学可以看看我的解法,希望有一个好好的收获哦!、
2.题目分析
整个题目的大致意思是这样:
3.题目实现
话不多说,直接开干!代码和注释都灰常清楚, 还是一样,只要好好细品,包会哦!
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
//定义一个结构体存储餐厅的所在城市、分数以及它的下标
//定义下标的原因是为了方便打印结果,因为输入的时候就固定了它的编号,所以进行存储,更方便打印
struct getscore
{
char city[10]; //所在城市
int score; //分数
int index; //下标
};
//cmp函数为了实现qsort排序
int cmp(const void* p1, const void* p2)
{
//注意这里要定义一个结构体指针才能存储p1 p2,不然无法直接强制转换进行比较
struct getscore* a = (struct getscore*)p1;
struct getscore* b = (struct getscore*)p2;
int ret = strcmp(a, b); //由于它正好是按照strcmp的模式去比较的,所以我们直接进行比较
if (ret != 0)
{
return ret; //如果ret不为0,说明两者的城市名称不一样,所以我们就直接返回那个城市差
}
return b->score - a->score; //到这里说明ret=0,所以城市名一样,所以返回两者的分数差
}
int main()
{
int n = 0;
scanf("%d", &n);
int score = 0;
struct getscore SP[100]; //定义结构体数组,存储各个餐厅的数据
for (int i = 0; i < n; i++)
{
scanf("%s %d", &SP[i].city, &SP[i].score); //分别输入进去
SP[i].index = i + 1; //然后下标按照题目给的要求一个一个给
}
qsort(SP, n, sizeof(struct getscore), cmp); //进行排序
for (int i = 0; i < n; i++)
{
printf("%d\n", SP[i].index); //直接打印就好了
}
return 0;
}
怎么说,是不是这样解灰常简单呢?希望你有很大的收获,觉得还行的话多多支持!咱们下期见!