XDOJ 销售冠军 C

前言

坚持。


题干

问题描述 

某公司的市场部有n名销售员,现输入某年度每个销售员每个季度的销售业绩,试统计该市场部该年度每个季度的销售冠军及其业绩。

输入说明

输入数据的第一行为一个正整数n(0<n≤20),表示销售员的数目;

接下来有n行,每行5个整数,表示一个销售员的工号及其一至四季度的销售业绩,销售员工号为5位数的正整数,每个季度的销售业绩为4位数以内的正整数。

输出说明

输出数据分为4行,第一行是一季度的销售冠军工号和业绩,若本季度有多人的销售业绩与冠军业绩相同,则按输入时的工号次序输出他们的工号,最后输出业绩,各整数之间用一个空格分隔,第二行至第四行分别为二季度、三季度和四季度的统计结果,输出格式同上,详见输出样例。

测试样例:

输入样例1

3

10001  210  145  258   488

10002  45   128  304   417

10003  210  200  232   497

输出样例1

10001 10003 210

10003 200

10002 304

10003 497


解析

本解答核心创意:

  1. 将 两个for循环嵌套排序 转化为 一个while内含一个for
  2. 巧用tmp,简化代码

解答

#include<stdio.h>
typedef struct{
	int id;
	int sale[4];
}INFO;
int main(){
	int n,i=0,k,tmp,winner[4]={0};
	scanf("%d",&n);
	INFO a[20];
	while(i<n){
		tmp=0;
		scanf("%d",&a[i].id);
		for(k=0;k<4;k++){
			scanf("%d",&tmp);   
			a[i].sale[k]=tmp;
			if(tmp>winner[k]){
				winner[k]=tmp;
			}
		}
		i++;
	}
	for(i=0;i<4;i++){
		for(k=0;k<n;k++){
			if(a[k].sale[i]==winner[i]){
				printf("%d ",a[k].id);
			}
		}
		printf("%d\n",winner[i]);
	}
	return 0;
}

总结

  1. 熟悉 typedef 用法
  2. 各季度销售冠军要分别排名,适合加一个循环
  3. 不适合qsort,因为不需要排序,只需要挑出各个季度的最大值,用winner[4]存储
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值