n人中m人が当選するくじ
Posted feedbacks - Objective-C
アレイのuniqと似てるなぁ。 ちなみにn < mだと全員当選します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #import <Foundation/Foundation.h>
#import <stdio.h>
@interface NSArray (Random)
- (NSArray *)objectsAtRandom:(int)number;
@end
@implementation NSArray (Random)
- (NSArray *)objectsAtRandom:(int)m
{
int n = [self count];
id selected;
if (m >= n)
{
selected = self;
}
else
{
srand(time(nil));
NSMutableDictionary* winnerTable = [NSMutableDictionary dictionary];
selected = [NSMutableArray array];
id winner;
while ([selected count] < m)
{
winner = [self objectAtIndex:(rand()%n)];
if (![winnerTable objectForKey:winner])
{
[winnerTable setObject:winner forKey:winner];
[selected addObject:winner];
}
}
}
return selected;
}
@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool* pool = [NSAutoreleasePool new];
if (argc < 3) {
printf("Usage: %s n player1[,player2...]\n", argv[0]);
return 1;
}
NSArray* players = [[NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding] componentsSeparatedByString:@","];
for (id winner in [players objectsAtRandom:atoi(argv[1])])
{
printf("%s\n", [winner cStringUsingEncoding:NSUTF8StringEncoding]);
}
[pool release];
return 0;
}
|


にしお
#3360()
Rating0/0=0.00
[ reply ]