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 
#include 
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;
}

你可能感兴趣的:(CCF-CSP,c++,算法,数据结构)