【网易编程题】乘积

题目:
在这里插入图片描述


思路:
将数组从大到小排序。从最大的数开始减1,直到B能整除它,然后B=B除以这个数。以此类推。奇怪的是,我只考虑了减1的情况,也就是默认所有数相乘后是大于等于B的。我也不知道为什么,所有case就全部通过了。
在这里插入图片描述


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int cmp(const long long &a, const long long &b){
    return a > b;
}

int main(){
    int n, B;
    cin >> n >> B;
    vector<long long> vec;
    for (int i = 0; i < n; ++i){
        int t;
        cin >> t;
        vec.push_back(t);
    }
    
    sort(vec.begin(), vec.end(), &cmp);
    int count = 0;
    for (int i = 0; i < vec.size(); ++i){
        if (B % vec[i] == 0){
            B /= vec[i];
        }else{
            --vec[i];
            --i;
            ++count;
        }
    }
    cout << count <<endl;
}
发布了133 篇原创文章 · 获赞 2 · 访问量 4566

猜你喜欢

转载自blog.csdn.net/zxc120389574/article/details/105347205