思路:1.array[i]和array[j]前后比较
2.考虑前后相等的情况
3.将每天出售的食物依次取出放在result[k]中
#include<iostream>
using namespace std;
bool func(int *array, int i, int j){
if (array[i] < array[j]) {
return true;
}
else if (array[i] > array[j]){
return false;
}
else{//前后相等的情况
return func(array, i + 1, j - 1);
}
}
int main()
{
int n;
cin >> n;
int *array = new int[n];
for (int i = 0; i < n; ++i) {
cin >> array[i];
}
int *result = new int[n];
for (int i = 0, j = n - 1, k = 0; i < n; ++k) {
if (func(array, i, j)) {
result[k] = array[i];
i++;
}
else{
result[k] = array[j];
j--;
}
}
int sum = 0;
for (int i = 0; i < n; ++i) {
sum += result[i] * (i + 1);
}
cout << sum << endl;
delete[] array;
delete[] result;
return 0;
}
如下测试用例的结果也是43,能更好的理解本题思想(result[k]的顺序是1 2 3 1 5)。
5
1
2
3
1
5
如下测试用例result[k]的顺序是1 1 2 3 4,能更好的理解本题前后相等的情况(第一个1取的是array[0]的1)。
5
1
2
3
4
1