Я искал в Google, но мне не удалось найти решение моей проблемы.
Вот мой код
#include <bits/stdc++.h>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
using namespace std;
long long buyMaximumProducts(int n, long k, vector <int> a) {
// Complete this function
vector<pair<int, int>> p;
long i;
for(i=0; i<n; i++) {
p.push_back(make_pair(a[i], i+1));
}
sort(p.begin(), p.end());
if(k < p[0].first)
return 0;
long long sum=0,stocks=0;
for(i=0;i<n;i++)
{
if((sum+p[i].first*p[i].second) <= k)
{
sum+=p[i].first*p[i].second;
stocks+=p[i].second;
}
else
break;
}
long long amtleft=k-sum;
**stocks+=(long long)(amtleft/p[i].first);**
return stocks;
}
int main() {
int n;
cin >> n;
vector<int> arr(n);
for(int arr_i = 0; arr_i < n; arr_i++){
cin >> arr[arr_i];
}
long long k;
cin >> k;
long long result = buyMaximumProducts(n, k, arr);
cout << result << endl;
return 0;
}
Я получаю исключение с плавающей запятой. Я думаю, что ошибка идет из-за заявления звезды. Может кто-нибудь подсказать, в чем может быть правдоподобная причина и как ее убрать?
Программа содержит как минимум 3 ошибки.
long long k;
cin >> k;
long long result = buyMaximumProducts(n, k, arr);
long long buyMaximumProducts(int n, long k, vector <int> a) {
k — это long long, но параметр k — это только long.
for(i=0;i<n;i++) {
if((sum+p[i].first*p[i].second) <= k) {
sum+=p[i].first*p[i].second;
stocks+=p[i].second;
} else
break;
}
если мы никогда не доберемся до «перерыва», то «я» не является действительным для
stocks+=(long long)(amtleft/p[i].first);
вызывая исключение.
и если
p[i].first
ноль, вы получите деление на ноль исключения.
Других решений пока нет …