题目描述
你的任务是帮助淘宝网店店长整理销售数据,根据累计的销售记录,将所有商品按销售数量降序排列。
输入格式
输入包括多行数据(行数小于100000),每行数据包括4个信息,分别是商品名称、销售数量、单价、成交日期
商品名称由小写字母组成,且不超过100个字符,销售数量和单价都是正整数,且小于10000
输出格式
输出包括多行数据,将所有在输入中出现的商品按销售数量降序排列,每行数据包括3个信息,分别是商品名称、销售数量、销售额,如果两种商品销售数量一样,则按商品的字母顺序升序排列
输入样例
apple 1 20 2014-4-2
basketball 1 20 2014-4-2
computer 1 20 2014-4-2
shoe 1 20 2014-4-2
tv 1 20 2014-4-2
apple 1 18 2014-4-3
输出样例
apple 2 38
basketball 1 20
computer 1 20
shoe 1 20
tv 1 20
代码展示
注:销售额=销售数量*单价
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
struct Goods{
string name;
long long num;
long long price;
string date;
}alist[100005];
int isfind(Goods alist[],string name,int k){
for(int i=0;i<k;i++){
if(alist[i].name==name) return i;
}
return -1;
}
bool judge1(Goods g1,Goods g2){
if(g1.num>g2.num) return true;
else if(g1.num==g2.num&&g1.name<g2.name) return true;
else return false;
}
int main(){
//freopen("/config/workspace/test/test","r",stdin);
string name;
long long num;
long long price;
string date;
int i=0;
while(cin>>name>>num>>price>>date){
int k=isfind(alist,name,i);
if(i==0||k==-1){//无先前记录
alist[i]={name,num,price*num,date};//记录在当前位置
i++;
}
else if(k!=-1){//已有记录
alist[k].num+=num;
alist[k].price+=price*num;
}
}
sort(alist,alist+i,judge1);
for(int j=0;j<i;j++){
cout<<alist[j].name<<" "<<alist[j].num<<" "<<alist[j].price<<endl;
}
return 0;
}
//闲叙题外话:不吃早餐是不是不太健康..