#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