1.数字拆分
2.村庄对水果的需求
2.1 解题思路
从前往后遍历,依次将前面的水果运输到邻近村庄。一次遍历即可。
- ans表示当前村庄需要买卖的水果数量,
- cost表示总的运费,abs(ans)表示当前村庄水果运走需要的运费。
2.2 代码
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> data(n, 0);
for (int i = 0; i < n; i++)
cin >> data[i];
long long ans = 0;
long long cost = 0;
for(auto num:data){
ans += num;
cost += abs(ans);
}
cout << cost << endl;
return 0;
}
3.小Q减数字
3.1 解题思路
题意依次输出数组中最小元素、倒数第二大元素和最小元素的差值、倒数第三大元素和倒数第二大元素的差值......当数组中元素都为0时输出0。
- 首先对数组进行排序;
- 去除重复元素;
- 因为第一个要输出的是最小元素,后面输出的是相邻元素的差值,那么只要在数组前面补一个0,然后依次输出相邻元素的差值即可;
- 如果k大于数组的长度,输出0补齐即可;
3.2 代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n,k;
cin >> n >> k;
vector<int> data(n+1, 0);
for (int i = 1; i <= n; i++)
cin >> data[i];
sort(data.begin(), data.end());
data.erase(unique(data.begin(), data.end()),data.end());
for(int i=1;i<k+1;i++){
if(i<data.size()) cout << data[i] - data[i-1] << endl;
else cout << "0" << endl;
}
return 0;
}