【发布时间】:2019-07-15 04:06:24
【问题描述】:
让我们为它添加一些独创性。加法运算现在需要成本,而成本是要相加的两者的总和。因此,要添加 1 和 10,您需要成本 11。如果要添加 1、2 和 3。有几种方法:1 + 2 = 3,成本 = 31 + 3 = 4,成本 = 42 + 3 = 5 , cost = 53 + 3 = 6, cost = 62 + 4 = 6, cost = 61 + 5 = 6, cost = 6Total = 9Total = 10Total = 11我希望你已经明白你的使命,添加一组整数,这样成本最低。输入每个测试用例都以一个正数开始,N(2N5000) 后跟 N 个正整数(都小于 100000)。输入由 N 的值为零的情况终止。不应处理这种情况。输出对于每种情况,在一行中打印添加的最低总成本。
示例输入
3
1 2 3
4
1 2 3 4
0
样本输出
9
19
我尝试对给定数组进行排序,然后为 cumsum (CS) 取另一个数组,并将除 cs[0] 之外的所有 CS 元素求和。我正在为这种方法获取 WA,请解释一下
int n,i,hold=0;
while(1)
{
cin>>n;
if(n==0){break;}
int arr[n],cs[n];
for(i=0;i<n;i++) cin>>arr[i];
sort(arr,arr+i);
cs[0]=arr[0];
for(i=1;i<n;i++){cs[i]=arr[i]+cs[i-1]; }
cs[0]=0;
int sum=0;
for(i=1;i<n;i++){sum+=cs[i]; }
cout<<sum<<endl;
sum=0;
}
输入:
9
66 85 52 22 44 1 59 88 67
0
我的出局:
1822
预期结果(udebug):
1454
获取 WA
【问题讨论】:
-
int arr[n],cs[n];-- 这不是有效的 C++。 -
您有一个失败的测试输入。这使您比大多数提出这些问题的人领先一步。您应该做的是启动开发环境附带的调试工具,输入您的输入案例,并逐步执行程序,直到您发现程序与您的期望有偏差。这通常是一个错误。