数字分解排序
 
 问题描述    
 输入一个9位以内的正整数n,按数值从高到低的顺序输出n的各位数字。
 输入说明    
 一个正整数n(0<n<1000000000)
 输出说明    
 按数值从高到低的顺序输出n的各位数字,数字之间用空格隔开
 输入样例    
 564391
 输出样例    
 9 6 5 4 3 1
 #include <stdio.h>
 #include <stdlib.h>
int cmp(const void* a,const void* b)
 {
     int* A = (int*) a;
     int* B = (int*) b;
     return *B - *A;
 }
int main() 
 {
     long int  n=0,n1=0;
     int i=0,d=0;
     scanf("%ld",&n);
     n1=n;
     
     for(i=0;n>=10;i++)
     {
         n/=10;
     }
     d=i+1;
     int num[d]={0};
     for(i=0;i<d;i++)
     {
         num[i]=n1%10;
         n1/=10;
     }
     
     qsort(num,d,sizeof(num[0]),cmp);
     
     for(i=0;i<d;i++)
     {
         printf("%d ",num[i]);
     }
    return 0;
 }
  
 文件排序
 
 问题描述
 操作系统中在查找文件时会按照某个规则对文件排序,例如下图为按照文件修改日期逆序排
 序(最后修改的排在最前面)。
 但目前操作系统不支持同时按照多个字段进行排序。现在请你写一个程序能够同时按照修改
 日期和文件大小对文件进行排序,排序规则为:
 1. 日期优先,最后修改的排在前面
 2. 当修改日期相同时,大的文件排在前面。
输入说明
 第一行为一个数字 n,n 表示共有 n 个待排序的文件, 1≤ n≤ 100。
 接下来是 n 行,每行包含一个文件的修改日期和文件大小,这两个字段之间用空格分隔。
 文件修改日期包含年、月、日,表示年、月、日的整数之间用“/”分隔,格式为“年/月/
 日”。年份的数值在 1960-2018 之间;月份的数值在 1-12 之间;日的数值在 1-31 之间。
 文件大小是一个不超过 100000000 的整数。
 输入数据中没有完全相同的日期和文件大小。
 输出说明
 将输入数据按题目描述的规则排序后输出,每行输出一个文件的修改日期和文件大小。
 输入样例
 8
 2018/1/8 1024
 2012/10/31 256
 2014/10/29 300
 2012/10/31 457
 2014/10/27 512
 2011/10/27 95
 2014/11/3 1102
 2017/11/24 1535
 输出样例
 2018/1/8 1024
 2017/11/24 1535
 2014/11/3 1102
 2014/10/29 300
 2014/10/27 512
 2012/10/31 457
 2012/10/31 256
 2011/10/27 95
 #include <stdio.h>
 #include <stdlib.h>
typedef struct{
     int year;
     int month;
     int day;
     long int space;
 }files;
int cmp(const void* a,const void* b)
 {
     files* A = (files*) a;
     files* B = (files*) b;
     if(A->year == B->year)
     {
         if(A->month == B->month)
         {
             if(A->day == B->day)
             {
                 return B->space - A->space;
             }
             return B->day - A->day;
         }
         
         return B->month - A->month;
     }
     
     return B->year - A->year;
 }
int main() 
 {
     int n=0,i=0;
     scanf("%d",&n); 
     files file[n];
     
     for(i=0;i<n;i++)
     {
         scanf("%d/%d/%d",&file[i].year,&file[i].month,&file[i].day);
         scanf("%ld",&file[i].space);
     }
     
     qsort(file,n,sizeof(file[0]),cmp);
     
     for(i=0;i<n;i++)
     {
         printf("%d/%d/%d %ld",file[i].year,file[i].month,file[i].day,file[i].space);
         printf("\n");
     }
     
     return 0;
 }
 股票
 
 题目描述:
 小明热爱炒股,经过一番分析之后,他决定投入一笔资金买入一定数量的某只股票。
 之后连续n天,他每天都关注这支股票并进行交易,但不会追加资金,即他只会用卖股票的钱买入股票。
 现在给出他首次买入股票时的价格和数量,以及其后每天股票的价格和他的交易数量,
 请计算n天之后他的资产(股票总值 + 现金)。
 输入描述:
 输入数据由若干行构成,第一行为三个正整数m,p,n。
 m表示首次买入股票数量(0<m<10000),p表示首次买入价格(0<p<=100),n表示之后进行股票交易的天数(0<n<50)。
 其后是n行数据,每行包括两个整数k和d,k表示当天交易数量(-10000<k<10000),
 正数表示买入,负数表示卖出;d表示当天股票价格(0<d<=100)。
 输出描述:
 输出一个整数表示n天后小明的资产(股票总值 + 现金)。
 输入样例:
 100 10 5
 -30 12
 -30 18
 20 12
 30 10
 20 12
 输出样例:
 1440
 #include <stdio.h>
 int main() 
 {
     int num=0,pr=0,d=0,i=0;
     scanf("%d%d%d",&num,&pr,&d);
     int Num[d]={0};
     int Pr[d]={0};
     for(i=0;i<d;i++)
     {
         scanf("%d%d",&Num[i],&Pr[i]);
     }
     
     int w1=0,sum=0,w2=0;
     for(i=0;i<d;i++)
     {
         sum+=Num[i];
     }
     sum+=num;
     w1=sum*Pr[d-1];//计算最后一天股票的总资产
     sum=0;//清零,下一步还要用 
     for(i=0;i<d;i++)
     {
         sum+=(-1)*Num[i]*Pr[i];
     }
     w2=sum;//计算最后一天现金的总资产
     
     printf("%d",w1+w2); 
     
     return 0;
 }