n 个人去看电影,本来每人要买一张票,但电影院推出了一个活动:一个身高为 x 的人可以和身高至少为 2x 组合,两人一共只需买一张票。现在给出全体 n 个人的身高,请问总共至少要买多少电影票?
代码如下:
#include <iostream>
using namespace std;
int main()
{
int i,j,n,t;
int *p = 0;
int cnt ;
cout << "请输入人数:";
cin >> n;
cnt = n;
cout << "请输入"<<n<<"个人的身高:";
p = new int[n];
for(i=0;i<n;i++)
cin >> p[i];
//排序
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(p[j] > p[j+1])
{
t = p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
//从最矮的开始匹配
for (i=0;i<n;i++)
{
for(j=1;j<n;j++)
{
if(p[j] >= 2*p[i])
{
cnt--; //所需的票减去1张
break;
}
}
}
cout << "所需票数:"<< cnt<<endl;
return 0;
}
按身高由低到高排好序,从最矮的开始找其身高两倍及以上的人,找到其中最矮的。以此类推,直到找不到两倍以上的人为止。统计找到了多少个,总人数减去个数就是需要的电影票数