1 条题解
-
0
C++ :
#include<iostream> using namespace std; int sum = 0; int main() { int N; cin >> N; int *num = new int[N]; for(int i = 0; i < N; i++) { cin >> num[i]; } int min = 0; int min_d = 0; int min_mid = 0; int min_dmid = 0; for(int count = N; count > 1; count--) { min_mid = 0; min_dmid = 0; for(int i = 0; i < N; i++) { if((num[i] != 0) && (num[i] < num[min])) { min = i; } } //令mid_d为不等于min的一个值,排除num[min]后求剩下的元素最小值 for(int i = 0; i < N; i++) { if((num[i] != 0) && (i != min)) { min_d = i; break; } } for(int i = 0; i < N; i++) { if(i == min) continue; else { if((num[i] != 0) && (num[i] < num[min_d])) { min_d = i; } } } min_dmid = num[min_d];//因为相加后就得将改坐标删除,所以用两个中间变量记录两个最小值 min_mid = num[min]; for(int i = 0; i < N; i++) { if((num[i] != 0) && (num[i] == min_dmid)) { sum += min_dmid; num[i] = 0; } if((num[i] != 0) && (num[i] == min_mid) && (min_mid != min_dmid)) { sum += min_mid; num[i] = 0; } } num[min] = min_mid + min_dmid; } cout << sum << endl; delete [] num; return 0; }
- 1
信息
- ID
- 3047
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者