Posted on 2012-05-09 00:50
hoshelly 阅读(3054)
评论(0) 编辑 收藏 引用 所属分类:
Programming
输入
第一行包含一个整数T,表示有T组测试数据。对于每组测试数据:第一行包含一个整数N,表示有N个元素(N不大于50),第二行包含N个整数,表示这N个元素(各个元素的值小于1000)。
输出
对于每组测试数据,输出一行,包含一个数据即返回的最小值。
样例输入
2
3
3 2 1
5
-1 5 3 -2 4
样例输出
1
-2
解法一:
将一个数组,分成两部分,然后求出两部分中的最小值,当然这里有一个要考虑的情况是,然后元素的个数为奇数个的时候,我们可以将其分为三部分,中间元素,前半部分,后半部分。然后使用递归的方法,求出数组元素中的最小值。
#include<stdio.h>
int Min(int a[],int n)
{
int a1,a2,a3;
if(n==1)
return a[0];
if(n%2==0)
{
a1=Min(a,n/2);
a2=Min(a+n/2,n/2);
if(a1>a2)
return a2;
else
return a1;
}
else
{
a1=Min(a,n/2);
a2=Min(a+n/2+1,n/2);
a3=a[n/2];
if(a1>a2)
{
if(a2>a3)
return a3;
else
return a2;
}
else
{
if(a1>a3)
return a3;
else
return a1;
}
}
}
int main()
{
int n,m,i;
int a[50];
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
printf("%d\n",Min(a,m));
}
return 0;
}
解法二:
代码如下
#include<stdio.h>
int Min(int a[],int n)
{
if(n==0)
return a[0];
else
return ((Min(a,n-1)<a[n])? Min(a,n-1):a[n]);
}
int main()
{
int n,m,i;
int a[50];
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
printf("%d\n",Min(a,m-1));
}
return 0;
}