| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 848 人关注过本帖, 1 人收藏
标题:请高手进来解惑(一个关于数据分组的问题)
只看楼主 加入收藏
wu_qingzhou
Rank: 1
等 级:新手上路
帖 子:43
专家分:2
注 册:2009-4-27
结帖率:66.67%
收藏(1)
已结贴  问题点数:3 回复次数:13 
请高手进来解惑(一个关于数据分组的问题)
假设有一个数据集A,A中有N个整型数据(可以有重复的数据)。现在要将数据集A分成两组,分别为数据集B和数据集C(B与C中数据个数可以不等)。令sumB为数据集B中的所有数据之和,sumC为数据集C中的所有数据之和。问:要如何分组才能使sumB和sumC之间的差值最小。假设A为{1,3,5,7,8,11,19}。
搜索更多相关主题的帖子: 如何 
2012-10-18 09:02
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
求总和SumA,求SUmA/2
此数为SumB ,循环累加求和,找SumB,在一个循环里不一定能找到这个数,我有一类似的帖可参考。

www.qunxingw.wang
2012-10-18 10:27
wu_qingzhou
Rank: 1
等 级:新手上路
帖 子:43
专家分:2
注 册:2009-4-27
收藏
得分:0 
回复 2楼 qunxingw
把帖子连接发一下。
2012-10-18 10:34
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:1 
数据排序  结果就出来了
2012-10-18 10:55
wu_qingzhou
Rank: 1
等 级:新手上路
帖 子:43
专家分:2
注 册:2009-4-27
收藏
得分:0 
回复 4楼 寒风中的细雨
单靠排序怎么出来?
2012-10-18 11:05
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
收藏
得分:0 
先排序,然后数据从大到小分组就可以了。
2012-10-18 11:29
wu_qingzhou
Rank: 1
等 级:新手上路
帖 子:43
专家分:2
注 册:2009-4-27
收藏
得分:0 
回复 6楼 风之子MIKEY
这样不能保证sumB和sumC之间的差最小啊。
2012-10-18 11:33
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
收藏
得分:0 
#include <iostream>
using namespace std;
void sort(int *a,int b,int c)
{
    int temp=a[b];
    for(int i=b;i<c;i++)
    {
        int max=i;
        for(int j=i+1;j<c;j++)
        {
            if(a[max]<a[j])max=j;
        }
        if(max!=i)
        {
            temp=a[max];
            a[max]=a[i];
            a[i]=temp;
        }
    }
}
int sum(int *a,int b)
{
    int sumb=0;
    for(int i=0;i<b;i++)sumb+=a[i];
    return sumb;
}
main()
{
    int a[10];
    cout<<"plese enter 10 data:";
    for(int i=0;i<10;i++)cin>>a[i];
    sort(a,0,10);
    int b[10],c[10],b_i=0,c_i=0;
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    for(i=0;i<10;i++)
    {
        if(sum(b,b_i)>sum(c,c_i))
        {
            c[c_i]=a[i];
            c_i++;
        }
        else
        {
            b[b_i]=a[i];
            b_i++;
        }
    }
    cout<<"b is:";
    for(i=0;i<b_i;i++)cout<<b[i]<<",";
    cout<<"\n c is";
    for(i=0;i<c_i;i++)cout<<c[i]<<",";
    cout<<"\n ";
      return 0;   
   
}
2012-10-18 19:08
努力学习ing
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-10-15
收藏
得分:0 
回复 8楼 风之子MIKEY
你的试了都对,但是还是想不太明白,你能指点下吗???就是关键部分:
for(i=0;i<11;i++)
    {
        if(sum(b,b_i)>sum(c,c_i))
        {
            c[c_i]=a[i];
            c_i++;
        }
        else
        {
            b[b_i]=a[i];
            b_i++;
        }
    }
为什么这样就可以了???
2012-10-18 21:13
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
以下是引用努力学习ing在2012-10-18 21:13:52的发言:

你的试了都对,但是还是想不太明白,你能指点下吗???就是关键部分:
for(i=0;i<11;i++)
    {
        if(sum(b,b_i)>sum(c,c_i))
        {
            c[c_i]=a;
            c_i++;
        }
        else
        {
            b=a;
            b_i++;
        }
    }
为什么这样就可以了???
因A数已是由大到小排序。扫描这组数时,因b,c初始态相等都是0,此时第一个最大的数保存在B里,再取i=1时,比较B,C的大小,此时B 大,这时第二大数放入C,.....达到B,C相近的目的。

www.qunxingw.wang
2012-10-19 00:07
快速回复:请高手进来解惑(一个关于数据分组的问题)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012870 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved