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
解析
本解答核心创意:
- 将 两个for循环嵌套排序 转化为 一个while内含一个for
- 巧用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;
}
总结
- 熟悉 typedef 用法
- 各季度销售冠军要分别排名,适合加一个循环
- 不适合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
解析
本解答核心创意:
- 将 两个for循环嵌套排序 转化为 一个while内含一个for
- 巧用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;
}
总结
- 熟悉 typedef 用法
- 各季度销售冠军要分别排名,适合加一个循环
- 不适合qsort,因为不需要排序,只需要挑出各个季度的最大值,用winner[4]存储
发布评论