這是本灌水系列最後一篇,到此已練功完成。
如果有其他語言需要解答,我找到這裡有各種不同的程式語言版本(缺Objective-C XD);此站看來是學生作業的好幫手呀。
以下是特別版的code:
如果有其他語言需要解答,我找到這裡有各種不同的程式語言版本(缺Objective-C XD);此站看來是學生作業的好幫手呀。
以下是特別版的code:
#import <Foundation/Foundation.h> @interface Combinations : NSObject { NSMutableArray *list; } -(NSMutableArray *) calc: (int) all andWant: (int) want; -(void) calc: (NSMutableArray *) before andAll: (int) all andWant: (int) want; -(void) addList:(NSMutableArray *) before andAfter: (NSMutableArray *) after; @end @implementation Combinations -(void) addList:(NSMutableArray *)before andAfter:(NSMutableArray *)after { NSMutableArray *temp= [NSMutableArray arrayWithArray:before]; [temp addObjectsFromArray:after]; [list addObject:temp]; } -(void) calc:(NSMutableArray *) before andAll: (int) all andWant:(int)want { NSMutableArray *temp= [[NSMutableArray alloc] init]; if(want == 0) { for(int i=0; i<all;i++) { [temp addObject: @"0"]; } [self addList: before andAfter: temp]; } else if(all == want) { for(int i=0; i<all;i++) { [temp addObject: @"1"]; } [self addList: before andAfter: temp]; } else if(all == 1) { switch(want) { NSString *k = [NSString stringWithFormat:@"%d", want]; [temp addObject:k]; } [self addList: before andAfter: temp]; } else { NSMutableArray *newbefore=[NSMutableArray arrayWithArray:before]; [newbefore addObject:@"0"]; [self calc: newbefore andAll: all-1 andWant: want]; NSMutableArray *newbefore2=[NSMutableArray arrayWithArray:before]; [newbefore2 addObject:@"1"]; [self calc: newbefore2 andAll: all-1 andWant: want-1]; } } -(NSMutableArray *) calc :(int)all andWant :(int)want { list =[[NSMutableArray alloc]init]; NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects: nil]; [self calc:temp andAll:all andWant:want]; return list; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Combinations *cb = [Combinations alloc]; int all=4; int want=2; if(argc == 3) { all = atoi(argv[1]); want = atoi(argv[2]); } NSMutableArray *arr=[cb calc :all andWant:want]; printf("\n%d取%d,結果共%lu個\n", all, want, arr.count); for(int i=0; i<arr.count; i++) { NSMutableArray *temp =[arr objectAtIndex:i]; for(int j=0; j<temp.count; j++) { printf("%s ", [[temp objectAtIndex:j] UTF8String]); } puts(""); } [cb release]; [pool drain]; return 0; }以下是一般的組合版本
#import <Foundation/Foundation.h> #import <Foundation/NSArray.h> @interface Combinations : NSObject { NSMutableArray *list; } -(NSMutableArray *) calc: (int) all andWant: (int) want; -(void)calc: (NSMutableArray *) before andInlist:(NSMutableArray *) inlist andAll: (int) all andWant: (int) want; -(void) addList:(NSMutableArray *) thelist ; -(void) addList:(NSMutableArray *) before andAfter: (NSMutableArray *) after; @end @implementation Combinations -(void) addList:(NSMutableArray *) thelist{ [list addObject:thelist]; } -(void) addList:(NSMutableArray *)before andAfter:(NSMutableArray *)after { NSMutableArray *temp= [NSMutableArray arrayWithArray:before]; [temp addObjectsFromArray:after]; [list addObject:temp]; } -(void) calc:(NSMutableArray *) before andInlist: (NSMutableArray *) inlist andAll: (int)all andWant:(int)want { NSMutableArray *temp= [[NSMutableArray alloc] init]; if(want == 0) { [self addList:before]; } else if(all == want) { [self addList:before andAfter:inlist]; } else { NSMutableArray *newarr= [NSMutableArray arrayWithArray:before]; temp= [NSMutableArray arrayWithArray:inlist]; [temp removeObjectAtIndex:0]; [newarr addObject: [inlist objectAtIndex: 0]]; [self calc:newarr andInlist:temp andAll:all-1 andWant:want-1]; [self calc:before andInlist:temp andAll:all-1 andWant:want]; } } -(NSMutableArray *) calc:(int)all andWant:(int)want { list =[[NSMutableArray alloc]init]; NSMutableArray *alllist = [[NSMutableArray alloc] init]; NSMutableArray *empty = [[NSMutableArray alloc] init]; for(int i=1; i<=all; i++) { [alllist addObject: [NSString stringWithFormat:@"%d", i]]; } [self calc:empty andInlist:alllist andAll:all andWant:want]; return list; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Combinations *cb = [Combinations alloc]; int all=4; int want=2; if(argc == 3) { all = atoi(argv[1]); want = atoi(argv[2]); } NSMutableArray *arr=[cb calc:all andWant:want]; printf("\n%d取%d,結果共%lu個\n", all, want, arr.count); for(int i=0; i<arr.count; i++) { NSMutableArray *temp =[arr objectAtIndex:i]; for(int j=0; j<temp.count; j++) { printf("%s ", [[temp objectAtIndex:j] UTF8String]); } puts(""); } [pool drain]; return 0; }
留言