153
社区成员




这天小F来到超市,准备买瓶可乐解渴。
货架上有N瓶可乐,每瓶可乐的净含量可能不同。
现在超市推出“可乐买一送一”活动:买一瓶可乐就可以再免费选一瓶可乐,但是免费送的这瓶可乐的净含量不能多于买的这瓶的净含量。
小F只打算花钱买最多一瓶可乐,小F想知道他最多能喝到多少可乐(以净含量为单位)
第一行一个正整数T,表示数据组数。
对于每组测试数据,第一行一个正整数N表示有N瓶可乐。
接下来一行包含N个正整数ai,分别代表第i个可乐的净含量。
数据范围:
T<=1000
1<=N<=100
1<=ai<=1e9
对于每组测试数据,输出一个整数,整数为最多能喝到的可乐(以净含量为单位)。每组数据独占一行。
这道题有两种做题思路。
第一种
就是找最大值;你先找到一组数列中的最大值,然后将这个最大值放在另一个数组中,接着再找剩余数的最大值,同理放在另一个新数组中。最后将两个数组中第一个数进行相加就可以了。例如一组数中7为最大值,6为第二大值,那么就将7放入a[101]数组中,将6放入b[101]数组中,最后a[0]+b[0]就可以了。
第二种
通过冒泡法进行排序,从小到大排,然后将最后两组数相加就可以了。
我这里用的是冒泡法解决的,如果对冒泡法不懂得,可以尝试使用第一种方法做。
#include <iostream>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,i,j,b,a[101];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(j=1;j<n;j++)//冒泡法
for(i=0;i<n-j;i++)
if(a[i]>a[i+1])
{
b=a[i];
a[i]=a[i+1];
a[i+1]=b;
}
cout<<a[n-1]+a[n-2]<<endl;
}
return 0;
}