//
//ViewController.m
//CocoTest_1
//
//Created by S u p e r m a n on 2017/3/14.
//Copyright © 2017年张浩. All rights reserved.
//
#import"ViewController.h"
intfirstCount =0;
intinputNum[3] = {0};
@interfaceViewController()
@end
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//1.
[selftest1];
}
/**
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
- (void)test1 {
intnum[4] = {1,2,3,4};
getThreeNum(0, num);
}
// index从0开始
voidgetThreeNum(intindex,int*num){
if(index ==3) {
printf("第%d个:", ++firstCount);
for(inti =0; i<3; i++) {
printf("%d",inputNum[i]);
}
printf("\n");
}else{
for(inti =1; i<=4; i++) {
//index以后的数据要清空
for(intk = index; k<3; k++) {
inputNum[k] =0;
}
//判断下个书籍是否可以加入,index以前的来判断
BOOLisCanJoinNum =YES;
//当前的将要放入的值在tempNum是存在的
for(intk =0; k
if(i ==inputNum[k]) {
isCanJoinNum =NO;
break;
}
}
if(isCanJoinNum) {
inputNum[index] = i;
getThreeNum(index+1, num);
}else{
continue;
}
}
}
}
@end
//更加简单的办法
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
intmap[5] = {0};
intsave[4] = {0};
test1(0,map,save);
}
/**
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
可以理解成3个桶A,B,C
在A桶的时候可以顺序的放入1,2,3,4
在B桶中只能放入不在A桶的数(需要用一个Map数组来标记是否访问过的)
在C桶中也是一样的
*/
voidtest1(intstep,int* map,int* save) {
if(step ==3) {
for(inti =0; i <3; i ++) {
printf("%d",save[i]);
}
printf("\n");
return;
}
for(inti =1; i <=4; i ++) {//1,2,3,4
if(map[i] ==0) {
map[i] =1;//标记当前的i已经被用了不能再用了
save[step] = i;
test1(step+1,map,save);
//把当前的i解除占用,这样在第二步的时候还是可以用这个i
map[i] =0;
}
}
}
@end