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]存储

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]存储