题意:一个人吃饭,种类有三类,每类来一份。每类要选则价格在中间的那一种食物,如果每类有n中,n为偶数,那么就选择中间值较贵的那一份。
思路:将每种价格排序,求出价格,寻出食物名称。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int t, x, y, z, i, mid1, mid2, mid3, ans;
int ans1, ans2, ans3;
char name[1000][100]; //食物名称
int price[1000], a[1000], b[1000], c[1000];
scanf("%d", &t);
while(t--)
{
scanf("%d%d%d", &x, &y, &z);
for(i = 0; i < x; i++)
{
scanf("%s", name[i]);
scanf("%d", &price[i]);
a[i] = price[i];
}
for(i = x; i < x + y; i++)
{
scanf("%s", name[i]);
scanf("%d", &price[i]);
b[i - x] = price[i];
}
for(i = x + y; i < x + y + z; i++)
{
scanf("%s", name[i]);
scanf("%d", &price[i]);
c[i - x - y] = price[i];
}
sort(a, a + x); //******
sort(b, b + y); //将三类食物的价格排序
sort(c, c + z); //******
if(x % 2 == 0)
mid1 = x / 2;
else
mid1 = x / 2;
if(y % 2 == 0)
mid2 = y / 2; //求出中间价格所在的位置
else
mid2 = y / 2;
if(z % 2 == 0)
mid3 = z / 2;
else
mid3 = z / 2;
for(i = 0; i < x; i++)
{
if(a[mid1] == price[i])
ans1 = i;
}
for(i = x; i < x + y; i++)
{
if(b[mid2] == price[i])
ans2 = i;
}
for(i = x + y; i < x + y + z; i++)
{
if(c[mid3] == price[i])
ans3 = i;
}
//printf("%d %d %d\n",mid1, mid2, mid3);
ans = a[mid1] + b[mid2] + c[mid3];
printf("%d %s %s %s\n", ans, name[ans1], name[ans2], name[ans3]);
}
return 0;
}
本文介绍了一种用于从三类不同食物中选择中间价格菜品的算法,并提供了完整的C++实现代码。该算法首先读取每类食物的名称和价格,然后通过排序找到每类食物中间价位的食物。

1579

被折叠的 条评论
为什么被折叠?



