输出抛出大量数字

the output is throwing large numbers

问题是: 厨师和他 5 岁的儿子去购物了。到目前为止,他们已经购买了 N 件商品。物品编号从1到N,第i件物品重Wi克。

大厨的儿子坚持要帮父亲搬运东西。他想让他爸爸给他一些东西。大厨不想给儿子添负担。但他不会停止打扰他,除非给他一些物品让他随身携带。所以大厨决定给他一些东西。显然,大厨是想减轻孩子的负担。

不过,他的儿子是个聪明的孩子。为了避免被赋予最低限度的重量,他建议将物品分成两组,一组恰好包含 K 件物品。然后大厨背着较重的那一组,他的儿子背着另一组。

帮助大厨决定儿子应该带走哪些物品。你的任务会很简单。告诉厨师他所携带的重量与 kid.Chef 携带的重量之间的最大可能差异已经和他 5 岁的儿子一起去购物了。到目前为止,他们已经购买了 N 件商品。物品编号从1到N,第i件物品重Wi克。

大厨的儿子坚持要帮父亲搬运东西。他想让他爸爸给他一些东西。大厨不想给儿子添负担。但他不会停止打扰他,除非给他一些物品让他随身携带。所以大厨决定给他一些东西。显然,大厨是想减轻孩子的负担。

不过,他的儿子是个聪明的孩子。为了避免被赋予最低限度的重量,他建议将物品分成两组,一组恰好包含 K 件物品。然后大厨背着较重的那一组,他的儿子背着另一组。

帮助大厨决定儿子应该带走哪些物品。你的任务会很简单。告诉大厨,他的体重和孩子的体重的最大可能差值。

输入:

第一行输入一个整数T,表示测试用例的个数。然后是 T 个测试用例。每个测试的第一行包含两个 space-separated 个整数 N 和 K。下一行包含 N space-separated 个整数 W1, W2, ..., WN。

输出:

对于每个测试用例,输出两者承载的重量之间的最大可能差异(以克为单位)。

示例输入 1

2

5 2

8 4 5 2 10

8 3

1 1 1 1 1 1 1 1

示例输出 1

17

2

说明

案例#1:最佳方式是厨师给儿子 K=2 件重量为 2 和 4 的物品。厨师自己携带其余物品。因此区别是: (8+5+10) ? (4+2) = 23 ? 6 = 17.

案例#2:厨师给儿子 3 样东西,他自己带了 5 样。

我的代码是:

#include <iostream>
using namespace std;
#include<bits/stdc++.h>

int main() {
    int t=0,n=0,k=0,j=0;
    cin>>t;
    while(t--){
        cin>>n>>k;
        int arr[n],son=0,father=0;
        for(int i=0;i<n;i++){
            cin>>arr[n];
        }
        sort(arr,arr+n);
        
        for(j=0;j<n;j++){
            if(j>=n-1-k){
                father+=arr[j];
            }
            else{
                son+=arr[j];
            }
        }
        cout<<father-son<<endl;
    }
    return 0;
}

我得到的输出是这样的: 1007357324

1389213724

你的数字越来越大,因为在这条线上

for(int i=0;i<n;i++){
    cin>>arr[n];
}

您正在更改 arr[n] 的值(该值不存在,因为您的数组从 0 变为 n-1)。基本上你没有改变数组内的任何值,所以它使用存储在内存中的垃圾值。

不获取那些大数字的解决方法是将行 cin>>arr[n]; 更改为 cin>>arr[i];。我没有测试你的代码来检查你是否对你试图解决的问题有正确的答案,但大数字会消失。

干杯!