ios-简单算法

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    
    //一、斐波那契数列
    for (int i=1; i<10; i++) {
        NSLog(@"称斐波那契数列:%d",[self gold:i]);
    }
    
    NSLog(@"\n---------我是分割线------------\n");
    
    //二、求和
    NSLog(@"求和:%d",[self sum:10]);
    NSLog(@"\n---------我是分割线------------\n");
    NSMutableArray * arr = @[@100,@50,@4,@200,@400].mutableCopy;
    
    //三、冒泡排序
    NSLog(@"冒泡排序:");
    for (id s in [self sortArrBig:arr]) {
        NSLog(@"%@ ",s);
    }
    NSLog(@"\n---------我是分割线------------\n");
    
    //四、水仙花
    [self Narcissus];

    NSLog(@"\n---------我是分割线------------\n");

    //五、将一个正整数分解质因数
    NSLog(@"正整数分解质因数");
    [self PositiveInt:20];
    NSLog(@"\n---------我是分割线------------\n");
    /*
    六、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
     */
    NSLog(@"猴子吃桃问题:%d",[self peach:10]);
    NSLog(@"\n---------我是分割线------------\n");
    
    //七、数列求和
    /*有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。*/
    NSLog(@"数列的前20项之和:%f",[self molecule:3]);
    NSLog(@"\n---------我是分割线------------\n");
    /*八、打印菱形
     
         *
        ***
       *****
        ***
         *
     
     */
    [self diamond:3];
    NSLog(@"\n---------我是分割线------------\n");

    //九、无重复三位数
    /*
     有1、2、3、4,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
     */
    [self threeInt];
}

//水仙花 数字
-(void)Narcissus{
    
    int i,j,k,n;
    for (n=100; n<1000; n++) {
        //分解出百位
        i = n/100;
        //分解出十位
        j = n/10%10;
        //分解出个位
        k = n%10;
        if (i*100+j*10+k == i*i*i+j*j*j+k*k*k) {
            NSLog(@"%d",n);
        }
    }
}


-(void)PositiveInt:(int)n{
    
    int i;
    for (i=2; i<n; i++) {
        while (n!=i) {
            if (n%i == 0) {
                NSLog(@"%d",i);
                n = n/i;
            }else{
                break;
            }
        }
    }
    NSLog(@"%d",n);
}


-(int)peach:(int)n{
    
    int day = n-1,x1 = 0,x2 = 1;
    while (day>0) {
        
        //第一天的桃子数是第2天桃子数加1后的2倍
        x1 = (x2 + 1)*2;
        x2 = x1;
        day--;
    }
    return x1;
}

-(float)molecule:(int)n{
    
    int i,j,number = n;
    float a = 2,b = 1,s = 0;
    for (i=1; i<=number; i++) {
        
        s = s+a/b;
        j = a;
        a = a+b;
        b = j;
    }
    return s;
}
/*
     *
    ***
   *****
  *******
   *****
    ***
     *
*/
//打印菱形
-(void)diamond:(int)n{
    
    for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=n-i; j++) {
            printf(" ");
        }
        for (int k = 1; k<=2*i-1; k++) {
            printf("*");
        }
        printf("\n");
    }
    for (int i= 1; i<=3; i++) {
        
        for (int j = 1; j<=i; j++) {
            printf(" ");
        }
        for (int k = 1; k<=2*n-1-2*i; k++) {
            printf("*");
        }
        printf("\n");
    }
}


-(void)threeInt{
    
    NSMutableArray * arr = [[NSMutableArray alloc]init];
    for (int i = 1; i<5; i++) {
        for (int j = 1; j<5; j++) {
            for (int k = 1; k<5; k++) {
                if (i!=k && i!=j && j!=k) {
                    //确保i、j、k三位互不相同
//                    NSLog(@"%d,%d,%d",i,j,k);
                    [arr addObject:[NSString stringWithFormat:@"%d%d%d",i,j,k]];
                }
            }
            
        }
    }
    NSLog(@"四个数组合三位数:%@",arr);
}

-(NSMutableArray*)sortArrBig:(NSMutableArray*)arr{
    
    //个数-1 次循环
    for (int j = 0; j<arr.count - 1; j++) {
        //比较前后两个值大小
        for (int i = 0; i<arr.count-1; i++) {
            //前后值互换
            if (arr[i] > arr[i+1]) {
                id small = arr[i];
                arr[i] = arr[i+1];
                [arr replaceObjectAtIndex:i+1 withObject:small];
            }
        }
    }
    return arr;
}

//函数就是用来求和的 1+++到某个数的和
-(int)sum:(int)n{
    
    if (n<=0){return-999999;}
    else if (n==1){return 1;}
    else   {return  [self sum:n-1] +n;}
}

//黄金分割数列,又称斐波那契数列
//1,1,2,3,5,8,13,21,34

-(int)gold:(int)n{
    
    if (n<=0)  return -9999999;
    if (n==1||n==2) return 1;
    else return  [self gold:n-2]+ [self gold:n-1];
}

@end

 

posted @ 2017-01-09 14:27  代码始我快乐  阅读(234)  评论(0编辑  收藏  举报