ios - Objective-C,计算一组值的所有可能总和以达到结果目标

标签 ios objective-c iphone c

我想在 Objective-C 中开发所有可能的总和以达到结果,就像在另一个线程中一样,但在 Objective-C 中

Example in JAVA

JAVA代码为:

public void sum_up_recursive(ArrayList<Integer> numbers, int target, ArrayList<Integer> partial) {
           int s = 0;
           for (int x: partial) s += x;
           if (s == target){
                System.out.println("sum("+Arrays.toString(partial.toArray())+")="+target);
           }
           if (s >= target)
                return;
           for(int i=0;i<numbers.size();i++) {
                 ArrayList<Integer> remaining = new ArrayList<Integer>();
                 int n = numbers.get(i);
                 for (int j=i+1; j<numbers.size();j++) remaining.add(numbers.get(j));
                 ArrayList<Integer> partial_rec = new ArrayList<Integer>(partial);
                 partial_rec.add(n);
                 sum_up_recursive(remaining,target,partial_rec);
           }
        }

我对 Objective-C 的意图:

主类:

    NSMutableArray *numbers = [[NSMutableArray alloc] init];

    [numbers addObject:@2];
    [numbers addObject:@4];
    [numbers addObject:@8];
    [numbers addObject:@16];
    [numbers addObject:@32];

    NSMutableArray *partial = [[NSMutableArray alloc] init];

    [testclass sum_up_recursive:numbers : 12 :partial];

方法:

- (void) sum_up_recursive: (NSMutableArray*) numbers: (int) target:(NSMutableArray*) partial{

    NSInteger s = 0;

    for (NSNumber *x in partial){
        s = s + [x integerValue];        
    }

    if (s == target){
        NSLog(@"RESULT: %@", partial);
    }

    if (s >= target){
        return;
    }

    for (NSInteger i = 0 ; i < [numbers count]; i++) {

        NSMutableArray* remaining;
        NSInteger n = [numbers objectAtIndex:i];

        for (NSInteger j=i+1 ; j < [numbers count]; j++) {
            [remaining addObject:[numbers objectAtIndex:j]];
        }

        NSMutableArray *partial_rec = partial;
        [partial_rec addObject: [NSNumber numberWithInteger:n]];

        [self sum_up_recursive:remaining:target:partial_rec];
    }

}

我没有错误,但我没有结果,我无法达到目标值,我是一名Android开发人员,可能任何有更多经验的人都可以看到我的代码中的错误是什么或给出其他意见。

我修复了错误,此方法完美运行:

- (void) sumUpRecursive:(NSMutableArray *)numbers withTarget:(NSInteger)target withPartial:(NSMutableArray *)partial {

    NSInteger s = 0;

    for (NSNumber *x in partial){
        s = s + [x integerValue];
    }

    if (s == target){
        NSLog(@"RESULT: %@", partial);
    }

    if (s >= target){
        return;
    }

    for (NSInteger i = 0; i < [numbers count]; i++) {

        NSMutableArray *remaining = [[NSMutableArray alloc] init];
        NSInteger n = [[numbers objectAtIndex:i] integerValue];

        for (NSInteger j = i + 1; j < [numbers count]; j++) {
            [remaining addObject:[numbers objectAtIndex:j]];
        }

        NSMutableArray *partial_rec = [[NSMutableArray alloc] init];
        [partial_rec addObjectsFromArray:partial];

        [partial_rec addObject: [NSNumber numberWithInteger:n]];

        [self sumUpRecursive:remaining withTarget:target withPartial:partial_rec];
    }

}

该方法的输出是:

数字(2、4、8、16、32)

1) 示例,总和目标:12,输出:4,8 表示.. 4+8。

2) 示例,总和目标:14,输出:2,4,8。

3) 示例,总和目标:44,输出:4,8,32

这个问题不是重复的,因为在另一个问题中,想法是搜索所有组合来求和,但问题只适用于 2 个数字,在我的例子中,我需要尝试使用 N+ 个数字。

最佳答案

首先,您的方法使用了非常不标准的语法。

- (void) sum_up_recursive: (NSMutableArray*) numbers: (int) target:(NSMutableArray*) partial{

通常你会做类似的事情

- (void)sumupRecursive:(NSMutableArray*)numbers target:(int)target partial:(NSMutableArray*)partial

调用就像这样

[self sumupRecursive:numbers target:100 partial:someOtherArray];

代码中的两个错误是“剩余”将始终为零,因为您从未将其设置为可变数组,并且“NSInteger n = [numbers objectAtIndex:i]”不应编译; objectAtIndex 返回 NSNumber* 而不是 NSInteger。

我什至没有试图理解代码应该做什么。

关于ios - Objective-C,计算一组值的所有可能总和以达到结果目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765589/

相关文章:

ios - EXC_BAD_ACCESS 代码=2 地址=0x0

ios - 如何在没有警告的情况下在 AppDelegate 中设置 statusBarStyle

iphone - 设置委托(delegate)时 ASIHTTPRequest 崩溃?

objective-c - 如何通过绑定(bind)和 NSArrayController 命名 Core Data 添加/删除项目的撤消菜单项?

iphone - 如何使用每个通知的 header 格式化推送通知?

iphone - 德语字符显示不正确

ios - 在 UIButtons 上禁用 UIPanGestureRecognizer

ios - IOS 上的 Youtube API 不发送事件

ios - 枚举对象并将其添加到 NSMutableSet 时的 exc_bad_access

ios - 静态让 sharedInstance 无法从 Objective-C 代码访问