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