月度排行榜问题

试题描述

   大名鼎鼎的某文学城网站系统要更新升级。假定所有书的关联数据为下面这几项: 
   1)书名,不含空白符的字符串,不超过59个字符。 
   2)作者,不含空白符的字符串,不超过19个字符。 
   3)本月月票数,整型数。 
   4)本月点击数,整型数。 
   5)完成字数,整型数。 
   请你定义书的结构体类型,内含上述数据成员。 
   然后给该文学城网站编写月度月票排行榜的程序,根据本月月票数将N本书从高到低排序(建议利用指针数组进行排序),若某两本书的月票数相同时,则根据本月点击数从高到低排序。最后输出排序后的书名。 
   假定不存在月票数和点击数均相同的书。

输入

   输入包含N + 1行: 
   第一行是正整数N。 
   第二行到第N + 1行,每行都有五个数据,邻近两数用一个空格隔开。这五个数据分别是某本书的书名、作者、本月月票数、本月点击数和完成字数。

输出

   输出N行,分别是根据本月月票数从高到低排序后的书名。若某两本书的月票数相同时,则根据本月点击数从高到低排序。

输入示例

   4 
   C++Programming Tom 917 5467 70000 
   CloudComputing Jack 1321 4590 60000 
   TheArtandScienceofC Amy 726 3994 2000 
   DataStructuresandAlgorithmAnalysinC White 1321 5387 40000

输出示例

   DataStructuresandAlgorithmAnalysinC 
   CloudComputing 
   C++Programming 
   TheArtandScienceofC

数据范围

   输入为int范围内的整数和字符串,输出为字符串,对于100%的数据,1 < N < 20

参考代码(qsort)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct ip
{
	char stra[60];
	char strb[20];
	int a,b,c;
}m[99999];
int cmp(const void *a,const void *b)
{
	ip m,n;
	m=*(ip*)a;
	n=*(ip*)b;
	if(m.a==n.a)
		return n.b-m.b;
	else
		return n.a-m.a;
}

int main()
{
	int N;
	scanf("%d",&N);
	for(int i=0;i<N;i++)
	{
		scanf("%s%s%d%d%d",m[i].stra,m[i].strb,&m[i].a,&m[i].b,&m[i].c);
	}
	qsort(m,N,sizeof(m[0]),cmp);
	for(int i=0;i<N;i++)
	{
		printf("%s\n",m[i].stra);
	}
	return 0;
}
Code language: PHP (php)
 如未特殊声明,文章均为原创。
 本文标题:月度排行榜问题
 本文链接:https://manwish.cn/article/%e6%9c%88%e5%ba%a6%e6%8e%92%e8%a1%8c%e6%a6%9c%e9%97%ae%e9%a2%98.html

留下评论