c++ 2*N数组分配为两个数组,使得差最小

源代码

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;


template<class T>

int length(T& arr)
{
    return sizeof(arr) / sizeof(arr[0]);
}

int main()
{
    string sSub;

    string sInput;

    uint8_t sumArray1;

    uint8_t sumArray2;

    int hub[100];

    int pos ;

    string para;

    int i = 0;

    cout<<"please input 2*N nums:"<<endl;

    getline(cin,sInput);

    sInput += " ";

    while(sInput.length() > 0 && sInput != " ")
    {
        pos = sInput.find(" ");

        sSub = sInput.substr(0,pos);         //截取一段数字字符

        // cout<<x<<endl;

        hub[i] = atoi(sSub.c_str());                //string 转 Int 

        i++;

        sInput = sInput.substr(pos+1);              //获取下一段字符串
    }


    int lenarr = i;                 //取巧获得数组的有效长度

    sort(hub,hub+lenarr);           //排序

    
    for(int i = 0; i<lenarr/2; i++) //最大的与最小的一组,次大的与次小的一组,以此类推
    {
        if(i != 2)
        {
            if(i%2 == 0)
            {
                sumArray1 += hub[i] + hub[lenarr-1-i];
            }
            else{
                sumArray2 += hub[i] + hub[lenarr-1-i];
            }
        }
        else                        //最后两个分配
        {
            sumArray1 += hub[i];

            sumArray2 += hub[i+1];
        }

    }

    int res = (sumArray1>sumArray2?(sumArray1-sumArray2):(sumArray2-sumArray1));

    cout<<"This is the result of the difference between two arrays: "<<to_string(res)<<endl;

    return 0;
}

结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值