2011-12-20 6 views
1

私はCollat​​z推測を使用して数学フェアのプロジェクトに取り組んでいます。here on wikipeadiaのように逆のグラフを作ってみたいと思いますが、私はどこかでうんざりしています私のコードとそれは逆の値のすべてを表示していません(例えば、配列から1つの奇数の値を見つけて、同じ値* 2を見つけるでしょうが、それを超えません)。目的c、逆Collat​​z、NSArraysをデバッグするのに役立ちます

#import "numberCreator.h" 

@implementation numberCreator 
@synthesize levels, nextX, nextY, numbers; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     numbers   = [[NSMutableArray alloc]initWithCapacity:1000];//gives the array an estamated cap. 
     currentLevel = [[NSMutableArray alloc]initWithCapacity:25]; 
     nextLevel  = [[NSMutableArray alloc]initWithCapacity:25]; 
     checkNumbers = [[NSMutableSet alloc]init]; 
    } 

    return self; 
} 

//Creates all of the needed numbers in the reverce Collatz Web 
- (void) create{ 
    [currentLevel addObject:[NSNumber numberWithInt:1]]; 
    [numbers addObject:[NSNumber numberWithInt:1]]; 
    [numbers addObject:[NSNumber numberWithInt:0]]; 
    [numbers addObject:[NSNumber numberWithInt:0]]; 
    [checkNumbers addObject:[NSNumber numberWithInt:1]]; 

    for(int x; x < levels; x++){ 
     for(int y; y < [currentLevel count]; y++){ 
      if([checkNumbers containsObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]floatValue]*2]]){} 
      else{ 
       [checkNumbers addObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]intValue]*2]]; 

       [numbers addObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]intValue]*2]]; 
       [numbers addObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]intValue]]];//The array is set like Number, Parent, level 
       [numbers addObject:[NSNumber numberWithInt:x+1]]; 

       [nextLevel addObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]intValue]*2]]; 
       if((y-1)/3%2==1){ 
        if([checkNumbers containsObject:[NSNumber numberWithInt:([[currentLevel objectAtIndex:y]floatValue]-1)/3]]){} 
        else{ 
         [checkNumbers addObject:[NSNumber numberWithInt:([[currentLevel objectAtIndex:y]intValue]-1)/3]]; 


         [numbers addObject:[NSNumber numberWithInt:([[currentLevel objectAtIndex:y]intValue]-1)/3]]; 
         [numbers addObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]intValue]]]; 
         [numbers addObject:[NSNumber numberWithInt:x+1]]; 

         [nextLevel addObject:[NSNumber numberWithInt:[[currentLevel objectAtIndex:y]intValue]*2]]; 
        } 
       }else{} 
      } 

     } 

     [currentLevel removeAllObjects]; 
     for(int y; y < [nextLevel count]; y++){ 
      [currentLevel addObject:[nextLevel objectAtIndex:y]]; 
     } 
     [nextLevel removeAllObjects]; 
    } 

    for(int x; x < [numbers count]; x++){ 
     NSLog(@"%i", [[numbers objectAtIndex:x]intValue]); 
    } 
} 

@end 
+3

あなたの記事の本文に関連コードを入れてください。したがって、すべての質問は自己完結型でなければなりません。ペーストビンがそのページを削除すると、あなたの質問は将来の読者にとって役に立たなくなります。 –

答えて

1

ので、あなたは、はるかに効率的であるNSMutableIndexSetを使用して、整数でのみ動作します。

#import "NumberCreator.h" 

@implementation NumberCreator 
@synthesize levels, numbers; 

- (id)init 
{ 
    if (!(self = [super init])) 
     return nil; 

    numbers = [NSMutableIndexSet new]; 
    return self; 
} 

- (void)create 
{ 
    [numbers removeAllIndexes]; 
    [numbers addIndex:1]; 

    NSMutableIndexSet *nextLevel = [NSMutableIndexSet indexSet]; 
    NSMutableIndexSet *currentLevel = [NSMutableIndexSet indexSetWithIndex:1]; 

    for (int i = 0; i < levels; i++) 
    { 
     [currentLevel enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { 

      if (! [numbers containsIndex:idx * 2]) 
       [nextLevel addIndex:idx * 2]; 

      if (idx % 6 == 4 && ! [numbers containsIndex:(idx - 1)/3]) 
       [nextLevel addIndex:(idx - 1)/3]; 
     }]; 

     [numbers addIndexes:nextLevel]; 
     [currentLevel removeAllIndexes]; 
     [currentLevel addIndexes:nextLevel]; 
     [nextLevel removeAllIndexes]; 
    } 

    [numbers enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { 
     NSLog(@"%i", idx); 
    }]; 
} 

@end 
+0

ありがとうございます!私は実際には客観的にあるリソースの多くを学ぶ必要があります。私に返答する前にNSMutableIndexSetについて知りませんでした。あなたは言語の詳細を学ぶために私が使うべき良い資源を知っていますか? – coopf

関連する問題