销售排行榜

题目描述

你的任务是帮助淘宝网店店长整理销售数据,根据累计的销售记录,将所有商品按销售数量降序排列。

输入
输入包括多行数据(行数小于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 <stdio.h>
#include<string.h>
typedef struct{
    char name[100];
    long num;
    long price;
    int visit;
}sell;
sell m[100000];
int length;
void input(){
    int i=0;
    char time[15];
    //m[0]=(struct *m)malloc(sizeof(m));
    while(scanf("%s %ld %ld %s",&m[i].name,&m[i].num,&m[i].price,time)!=EOF){
        m[i].visit==0;
        i++;
    }
   length=i;
  /* int l=0;
   while(l<length){
    printf("%s\n",m[l].name);
    l++;
   }*/
}
void chuli(){
    int n=0;
     //
    while(n<length-1){
        int k=n+1;
        m[n].price=m[n].price*m[n].num;
        while(k<length && m[n].visit==0){
                int compare=strcmp(m[n].name,m[k].name);
            if(compare==0){
                m[n].num+=m[k].num;
                m[n].price+=m[k].price*m[k].num;
                m[k].visit=1;
            }/*
            if(compare>0 && m[n].visit==0){
                char name1[15];
                strcpy(name1,m[n].name);
                int num1=m[n].num;
                int price1=m[n].price;
                strcpy(m[n].name,m[k].name);
                //*m[n].name=*m[k].name;
                m[n].num=m[k].num;
                m[n].price=m[k].price;
                strcpy  (m[k].name,name1);
               // m[k].name=name1;
                m[k].num=num1;
                m[k].price=price1;
            }*/
            k++;
        }
        n++;
    }
    n=0;
    while(n<length-1){
       int k=n+1;
        while(k<length && m[n].visit==0){
            if(m[k].visit==1){k++; continue;}
            if(m[n].num<m[k].num){
                char name1[15];
                strcpy(name1,m[n].name);
                long num1=m[n].num;
                long price1=m[n].price;
                strcpy(m[n].name,m[k].name);
                //*m[n].name=*m[k].name;
                m[n].num=m[k].num;
                m[n].price=m[k].price;
                strcpy  (m[k].name,name1);
               // m[k].name=name1;
                m[k].num=num1;
                m[k].price=price1;
            }
                if(m[n].num==m[k].num){
                int compare=strcmp(m[n].name,m[k].name);
            if(compare>0){
                char name1[15];
                strcpy(name1,m[n].name);
                long num1=m[n].num;
                long price1=m[n].price;
                strcpy(m[n].name,m[k].name);
                //*m[n].name=*m[k].name;
                m[n].num=m[k].num;
                m[n].price=m[k].price;
                strcpy  (m[k].name,name1);
               // m[k].name=name1;
                m[k].num=num1;
                m[k].price=price1;
            }
 
                }
                k++;
        }
        n++;
    }
}
 
void output(){
    int n=0;
    while(n<length){
        if(m[n].visit==0){
            printf("%s %ld %ld\n",m[n].name,m[n].num,m[n].price);
        }
        n++;
    }
}
int main(){
    //输入售卖信息
    //int length=0;
    input();
    //对售卖信息进行处理 求出售卖量
    chuli();
    //处理过的进行排序
   // paixu();
    //输出
    output();
    return 0;
}


你可能感兴趣的:(acm作业)