CCF- CSP 202209-1如此编码 按部就班 满分题解

CCF- CSP 202209-1如此编码 按部就班 满分题解

题目链接:202209-1如此编码

思路:

  • 按照题目要求,定义数组a[N],b[N],c[N];
  • 初始化c[0]=1,边输入a边初始化c
  • 深入理解题意:需要根据c的值去凑一个整数mc[i]的使用个数为b[i]
  • 从大到小进行选择(倒序),每次尽可能选择较多个数,最多为b[i]=m/c[i-1];,然后更新m,直到m为0

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 30;
int n,m;
int a[N],b[N],c[N];//按照题目要求设置
int main()
{
    cin>>n>>m;
    c[0]=1;//初始化c[0]
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        c[i]=c[i-1]*a[i];//根据定义求c[i]
    }
    for(int i=n;i>=1;i--)
    {
        b[i]=m/c[i-1];//b[i]为能选择的c[i-1]最大个数
        m -= b[i]*c[i-1];
    }
    for(int i=1;i<=n;i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值