小编Ste*_*024的帖子

将数字分组C++

这是问题所在:

您有N(N代表您拥有的数字)数字.将它们分成两组,使得组中数字之和的差异最小.

例子:

5 // N

1, 9, 5, 3, 8 // The numbers
Run Code Online (Sandbox Code Playgroud)

如果我们在A组中放置1,9和3,在B组中放置5和8,则差异为0.

我想首先我应该计算所有数字的总和并除以2.然后检查可能的数字组合,其总和不高于所有数字总和的一半.在我这样做之后,我将选择最大的数字并打印出组.

我遇到了所有组合的问题,特别是当N是大数字时.我怎样才能完成所有组合?


另外我认为有点不同,我会按降序对数字进行分组,我会将最大数字放在A组中,最小数字放在B组中.然后我会反过来.这适用于某些数字,但有时它不会显示最佳分组.例如:

如果我使用前面的例子.按降序排列数字.

9, 8, 5, 3, 1.
Run Code Online (Sandbox Code Playgroud)

A组最大,B组最低.

Group A: 9
Group B: 1
Run Code Online (Sandbox Code Playgroud)

其他方式.

Group A: 9, 3
Group B: 1, 8
Run Code Online (Sandbox Code Playgroud)

等等.如果最后我只有一个数字,我会把它放在总和较低的组中.所以我终于得到:

Group A: 9, 3
Group B: 1, 8, 5
Run Code Online (Sandbox Code Playgroud)

这不是最佳分组,因为差异是2,但是如我所示,以不同的方式分组,差异可以是0.

我怎样才能获得最佳分组?

码:

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int convertToBinary(int number) {
    int remainder;
    int binNumber = 0;
    int i = 1;
    while(number!=0)
    {
        remainder=number%2;
        binNumber=binNumber …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm combinations numbers

10
推荐指数
1
解决办法
3906
查看次数

与乐高塑料砖C++组合的数量

你有一些乐高塑料砖,所有砖都是1x1x1.你还有一块瓷砖,1xN(N <= 80),你应放置乐高积木.您可以按顺序对它们进行排序(如果一个序列具有3个或更多个连续的砖块,则一个序列是正确的),并且您必须在2个序列之间至少有1个空白空间.您应该计算可以将砖块放在瓷砖上的不同组合的数量.

这是一个例子:

如果图块是1x7,则有17种不同的组合.

输入:7输出:17

示例http://mendo.mk/task_files/kocki.gif的图片

此外,如果你没有砖,它被算作1组合.

我已经解决了这个问题,我找到了计算瓷砖最大长度为14(3个序列)的可能组合的方法.我发现它使用for循环.

我最大的问题是需要运行的大量for循环.例如,对于1个序列,我使用1个循环,2个序列2个循环+ 1个1个序列...所以如果我使用所有80个砖,我可以创建20个序列,我将不得不使用超过210个循环,这是数量巨大.所以,如果我可以将它们嵌套在一个中,那将是很好的.我尝试了它,它变得混乱,它没有给出正确的答案.

新代码:

#include <iostream>
using namespace std;
int main()
{
    long long int places, combinations = 1;
    cin >> places;
    long long int f[80], g[80];
    f[0] = 0;
    f[1] = 0;
    f[2] = 0;
    g[0] = 1;
    g[1] = 1;
    g[2] = 1;
    for(int i = 3; i<=places; i++)
    {
        f[i] = f[i-1] + g[i-3];
        g[i] = f[i-1] + g[i-1];
    }
    combinations = f[places] + g[places];
    cout << combinations;
    return …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm combinations loops lego

6
推荐指数
2
解决办法
1018
查看次数

具有多个赋值的匈牙利算法

假设我们有N个工作岗位和K工人做这些工作.但对于一些工作,我们需要2名员工,而对于一些人,我们只需要一名.员工也无法完成所有工作.例如,工人1可以做工作1,2和5,而不是工作3和4.此外,如果我们雇佣工人1来做工作1,那么我们希望他做第2和第5工作,因为我们已经付了工资.

例如,假设我们有5个工作岗位和6个工人.对于1,2和4工作,我们需要2个人,而对于工作3和5,我们只需要一个.这里是每个工人可以做的工作清单和他需要的工资.

Worker 1 can do jobs 1,3,5 and he requires 1000 dollars. 
Worker 2 can do jobs 1,5 and he requires 2000 dollars. 
Worker 3 can do jobs 1,2 and he requires 1500 dollars. 
Worker 4 can do jobs 2,4 and he requires 2500 dollars. 
Worker 5 can do jobs 4,5 and he requires 1500 dollars. 
Worker 6 can do jobs 3,5 and he requires 1000 dollars. 
Run Code Online (Sandbox Code Playgroud)

经过一些计算和逻辑思考,我们可以得出结论,我们必须雇用1,3,4和5工人,这意味着我们需要支付的最低工资是:1000 + 1500 + 2500 + 1500 = 5500美元.

但是我们如何才能找到一个可以输出该数量的高效算法呢?这让我想起了匈牙利算法,但所有这些额外的约束使我无法应用它.

algorithm optimization minimum hungarian-algorithm

6
推荐指数
1
解决办法
1526
查看次数

如何在AS3中一次删除所有事件侦听器

我在as3做了一个小游戏.

该游戏包含10个级别.

当我进入1级时,一切都没问题.但是当我进入第二级(帧)时,第一帧中的事件监听器仍在工作,并收到一条警告"无法访问null对象引用的对象".这是因为我删除了第一级的每个对象,然后添加第2级的对象.

我已经尝试使用removeEventListeners,但它不起作用,因为在删除事件监听器后,ENTER_FRAME监听器再次工作.

我尝试过使用不同级别的不同帧,但它不起作用.此外,我尝试使用1 frmae所有10帧,但我收到很多警告,Flash加载器超载.

如何切换关卡(后退和前进)?提前致谢.

  addEventListener(Event.ENTER_FRAME, subtracting2);
     arrListeners.pop(); // poping it out of the array because it will be deleted after the count reaches 0
     function subtracting2 (e:Event):void
     {
        count--;
        var FAcoef:Number = count/30; //
        FadeAway.alpha = FAcoef; //                   Some effect like FadeAway
        setChildIndex(FadeAway, numChildren - 1); //
        if(count == 0)
       {
            setChildIndex(FadeAway, 0);
            removeEventListener(Event.ENTER_FRAME, subtracting2);
        }
    }
Run Code Online (Sandbox Code Playgroud)

flash events listeners actionscript-3

5
推荐指数
1
解决办法
2万
查看次数