基础练习 数列特征
时间限制:1.0s 内存限制:256.0MB
问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。
思路一:
直接用比较得出最大最小值。
程序如下:
#include <iostream>
using namespace std;
//方法一 :直接用比较得出最大最小值
int main()
{
int n;
cin>>n;
int array[n];
for(int i=0;i<n;i++)
{
cin>>array[i];
}
int max=array[0],min=array[0],sum=array[0];
for(int i=1;i<n;i++)
{
if(max<array[i])//比较得出最大值
{
max=array[i];
}
if(min>array[i])//比较得出最小值
{
min=array[i];
}
sum=sum+array[i];//求和
}
cout<<max<<endl<<min<<endl<<sum<<endl;
return 0;
}
思路二:
使用链表list中的sort()函数进行排序
程序如下:
#include <iostream>
#include <list>
using namespace std;
//方法二:使用list中的排序函数sort()
int main()
{
int n;
cin>>n;
list<int>num;//初始化一个类型为int的链表
int p;
for(int i=0;i<n;i++)
{
cin>>p;
num.push_front(p);//将数据插入链表的头部,若原来有值,则原来的值向后移
}
num.sort();//排序函数,提供O(nlogn)的排序效率,默认使用升序排列
cout<<num.back()<<endl;//输出最大值。因为为升序,所以最大值在链表最后
cout<<num.front()<<endl;//输出最小值
int sum = 0;
for(int i=0;i<n;i++)
{
sum += num.front();
num.pop_front();//删除链表第一个元素
}
cout<<sum<<endl;
return 0;
}