250911算法练习:递归
问题 C: A107合唱比赛
#include<stdio.h>
char str[100];void di(int index, int n){if(index == n){printf("%s\n",str);return;}str[index] = 'N';di(index + 1, n);str[index] = 'Y';di(index + 1, n);}
int main(){int n;scanf("%d",&n);str[n] = '\0';di(0,n);}
问题 B: A015 分解因式
注意因子要越来越大
#include<stdio.h>
#include<math.h>
int cnt = 1;
void digui(int a,int start){for(int i = start;i <= sqrt(a);i++){if(a % i == 0){cnt++;digui(a / i, i);}}
}int main(){int zu, a;scanf("%d",&zu);while(zu--){cnt = 1;scanf("%d",&a);digui(a,2);printf("%d\n",cnt);}return 0;
}
1605: A018蜜蜂路线
#include<stdio.h>
#include<math.h>
int cnt = 0;
void digui(int start,int end){if(start == end){cnt++;return;}if(start > end)return;digui(start + 1, end);digui(start + 2, end);
}
int main(){int m,n;scanf("%d%d",&m,&n);digui(m,n);printf("%d",cnt);return 0;
}
1243: A003 经典的Hanoi(汉诺塔)问题
#include<stdio.h>
#include<math.h>void move(char start,char end){printf("%c-->%c\n",start,end);
}
void hanoi(int n,char a,char b,char c){if(n == 0)return;hanoi(n - 1,a,c,b);move(a,c);hanoi(n - 1,b,a,c);}int main(){int n;while(scanf("%d",&n) != EOF){hanoi(n,'A','B','C');printf("\n");}
}