xdoj综合,数字分解排序,文件排序,股票


数字分解排序


问题描述    
输入一个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;
}

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北の风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值