輸入
第一行包含一個整數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;
}
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;
}
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;
}