【问题描述】
编写程序,从n个整数中找到最小的数并输出。输入分2行:第一行为n的值,第二行为n个整数。
【输入形式】
输入分2行:第一行为n的值,第二行为n个整数
【输出形式】
最小的数
【样例输入】
5
1 5 2 3 0
【样例输出】
0
【样例说明】
先输入个数5,接下来输入5个数,这5个数分别是1、5、3、2、0,其中最小值是0
常规思路:
打擂台思想。所谓“成王败寇”。不断输入数,如果新输入的数比前面一个要小,那就新数当擂主,周而复始。
那么谁第一个当擂主呢?因为要求最小值,我们不妨先将擂主定义为一个很大的数。
#include
using namespace std;
int main()
{
int n,ans=2147483647,a;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
ans=min(ans,a);
}
cout<<ans<<endl;
}
根据所学知识,就这么写了。
但是,有人不讲武德,那我也没什么好说的了。
这道题还可以用排序——把所有的数从小到大排序,然后输出第一个数——因为第一个数就是最小的那个数。
算法复杂度最小的就是快速排序了。其原理可依照此程序进行参考研究。
#include
using namespace std;
const int N=1001;
int n,a[N];
void qsort(int,int);
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
qsort(1,n);
cout<<a[1];
}
void qsort(int l,int r)
{
int i=l,j=r,m=a[(l+r)/2],t;
do
{
while(a[i]<m) i++;
while(a[j]>m) j--;
if(i<=j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}while(i<=j);
if(l<j) qsort(l,j);
if(r>i) qsort(i,r);
}
当然,对原理掌握比较好的可以利用C++本身自带的快速排序的算法库,要调用algorithm
#include
#include
using namespace std;
const int N=1001;
int n,a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
cout<<a[1];
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)