C++算法题解:苹果分配问题

题目描述:

Lee现在有N个苹果准备分给3人,他的分配方式需要满足以下条件:

  1. 每个人至少有一个苹果。2. 至少一个人需要得到奇数个苹果。3. 有两个人得到的苹果数量需一样。

现在请输出三个人分别得到的苹果数。若有多种分配方法,输出字典序最小(设三个人得到的苹果数位a b c, 则优先a最小,其次b最小,其次c最小)的一种,题目保证至少有一种分法。

输入格式:

第一行一个整数t,代表有t组数据:对于每组数据,一个整数N,代表Lee一开始所持有的苹果数量。

数据范围:

4<=n<=2*(10^5),1<=t<=10^5;

输出格式:

每组数据一行,三个整数,用空格隔开,代表每个人分得的苹果数量。

样例:

输入:

14

输出:

1 1 2

**C++代码示例:**cpp#include using namespace std;

int main() { int t; cin >> t; while (t--) { int n; cin >> n; int a, b, c; // 按照要求分配苹果数量 if (n % 2 == 0) { // 如果n是偶数,则将n平均分给三个人 a = b = c = n / 3; } else { // 如果n是奇数,则将n-1平均分给三个人,再将剩余的1个苹果给第一个人 a = b = c = (n - 1) / 3; a += 1; } // 输出结果 cout << '1 1 ' << a << endl; } return 0;}

代码解析:

这段代码首先读取输入的t,表示有t组数据。然后进入循环,对于每一组数据,读取Lee一开始所持有的苹果数量n。接下来,根据题目给出的分配条件,计算每个人分得的苹果数量。

  • 如果n是偶数,为了满足条件3,将n平均分给三个人是最优解。* 如果n是奇数,为了满足条件2和3,将n-1平均分给三个人,并将剩余的1个苹果给第一个人可以得到字典序最小的解。

最后,按照要求输出每个人分得的苹果数量。循环结束后,程序结束运行。

C++算法题解:苹果分配问题

原文地址: https://www.cveoy.top/t/topic/UQw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录