基础练习 数列特征

来源:互联网 发布:个人时间规划软件 编辑:程序博客网 时间:2024/06/05 15:08

问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。

循环并求和,求和可以在输入的过程中完成,找出最大值与最小值可在获取输入的时候完成,也可以对数组进行排序。

PS:提交结果,第一种方法有两个测试用例用了15ms,而第二种方法所有测试用例使用时间均为0ms(属于快排的胜利)。当然,比赛的时候通常是想到什么写什么,哪有时间考虑那么多呢。

在输入过程中找出最大最小值

#include<stdio.h>int main(){    int n, i, max, min, sum;    scanf("%d", &n);    int list[n];    scanf("%d", &list[0]);    sum = list[0];    max = list[0], min = list[0];    for(i = 1; i < n; i++){        scanf("%d", &list[i]);        sum += list[i];        if(max < list[i]) max = list[i];        if(min > list[i]) min = list[i];    }    printf("%d\n%d\n%d\n", max, min, sum);    return 0;}

输入完成后用快速排序

#include<stdio.h>void quick_sort(int* list, int left, int right){    if(left >= right) return;    int target, i, j, temp;    target = list[left];    i = left, j = right;    while(i != j){        while(i < j && list[j] >= target) j--;        while(i < j && list[i] <= target) i++;        if(i < j){            temp = list[i];            list[i] = list[j];            list[j] = temp;        }    }    list[left] = list[i];    list[i] = target;    quick_sort(list, left, i - 1);    quick_sort(list, i + 1, right);}int main(){    int n, i, sum;    scanf("%d", &n);    int list[n];    scanf("%d", &list[0]);    sum = list[0];    for(i = 1; i < n; i++){        scanf("%d", &list[i]);        sum += list[i];    }    quick_sort(list, 0, n - 1);    printf("%d\n%d\n%d\n", list[n - 1], list[0], sum);    return 0;}