小猴编程周赛C++ | 2023年秋第5周T3分蛋糕

这篇文章介绍了如何通过C++实现一个算法,解决关于蛋糕分配的问题,目的是找到最少排除蛋糕种类以增加礼品组数,或者在不可能增加时确定最大组数。
摘要由CSDN通过智能技术生成

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】

小A有n种蛋糕,编号为1~n,第i种蛋糕有ai个。

小A现在希望把这些蛋糕尽可能多地分成若干相同的组做为给其他小伙伴的礼品。相同指的是每一组蛋糕都包含相同数量的不同种类的蛋糕,且最终不能有蛋糕剩下。(注意不能把一个蛋糕分成多份)

例如:小A有3种蛋糕,1号蛋糕有4个,2号蛋糕有6个,3号蛋糕有18个。那么小A最多就只能分出2组相同的礼品,每组礼品包含2个1号蛋糕,3个2号蛋糕,9个3号蛋糕。

但小A现在希望能分出更多组礼品来,又同时要保证每组蛋糕相同。

于是他决定做这样一件事情,小A将挑出若干种类的蛋糕,让这些特定种类的蛋糕不再做为礼品,也相当于把它们去掉。

比如:小A有3种蛋糕,1号蛋糕有4个,2号蛋糕有6个,3号蛋糕有18个。小A如果选择让1号蛋糕不再为礼品,那么他就最多可以分出3组相同的蛋糕,每组包含2个2号蛋糕,和6个3号蛋糕。

现在小A想要知道,他最少要选出几种蛋糕让它们不再是礼品,才能使得比刚开始分出的组数更多。你需要输出这个最小值。

假如小A无论如何都没有办法做到分出更多组相同蛋糕的话,输出不去掉任何蛋糕的情况下我们最多能够分出多少组相同的蛋糕。

注意: 一、刚开始能够分出的组数有可能为0。 二、让所有种类的蛋糕都不作为礼物的话,最后相当于只能分0组。

【输入】

第一行,一个正整数n表示有n种蛋糕。

接下来一行一共n个用空格分隔的正整数ai,表示第i种蛋糕的数量。

【输出】

一行,如果小A无法让分出的组数变多,输出一个正整数,表示最多能够分出多少组相同的蛋糕。

否则的话,输出一个正整数,表示最少要选出几种蛋糕不再作为礼物。

【输入样例】

3
2 2 2

【输出样例】

2

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int n, a, c[2000005];
int gcd(int a, int b)
{
    int r = a % b;
    while (r!=0) {
        a = b; 
        b = r;
        r = a % b;
    }
    return b;

}
int main()
{
    cin >> n;
    int g = 0;  //计算多个数的公因数,初始g要设置为0
    for (int i=1; i<=n; i++) {
        cin >> a;
        g = gcd(g, a);
        for (int j=1; j*j<=a; j++) {
            if (a%j==0) {
                c[j]++;
                if (j*j!=a) c[a/j]++;
            }
        }
    }
    int ans = 0;
    for (int i=g+1; i<=2000000; i++) {
        ans = max(ans, c[i]);  // c[i]:表示以i为因数的个数
    }
    // cout << "ans "  << ans << endl;
    if (ans==0) cout << g << endl;
    else cout << n-ans << endl;
    // cout << g << endl;
    return 0;
}

【运行结果】

3
2 2 2
2
  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值