题目 1:
数的组合问题。从1,2,…,n中取出m个数,将所有组合按照字典顺序列出。如n=3,m=2时,输出:12 13 23
#include <stdio.h>
int Function(int n,int m,int a[],int depth,int output[],int size,int x) //n即指有n个数,m为从n个数中选取的个数,a[]为所选取的数组,depth递归进入深度,output答案,size为大小,x为当前扫描到的位置
{
if(m == 0)
{
int i;
for(i = 0;i < size;i++)
{
printf("%d ",output[i]);
}
printf("\n");
return 1;
}else
{
int i;
for(i = x;i <= n - m;i++)
{
output[depth] = a[i];
Function(n,m - 1,a,depth + 1,output,size,i + 1);
}
}
}
int main ()
{
int output[2];
int a[5] = {1,2,3,4,5};
Function(5,2,a,0,output,2,0);
return 0;
}
题目 2:
小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现只剩下一个桃子了问第一天猴子共摘多少个桃子?
#include <stdio.h>
int Peachcount(int day)
{
if(day == 10)
return 1;
return (Peachcount(day + 1)+1) * 2;
}
int main ()
{
int day = 1;
printf("第一天的桃子个数:%d\n",Peachcount(1));
return 0;
}
题目3:
有雌雄一对兔子,假定过两个月便可每个月繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
#include <stdio.h>
int Rabbitcount(int month)
{
if(month == 0 || month == 1)
return 1;
return Rabbitcount(month - 1) + Rabbitcount(month - 2);
}
int main ()
{
int month;
printf("请输入过了多少个月:\n");
scanf("%d",&month);
printf("兔子的一共的对数:%d",Rabbitcount(month));
return 0;
}
题目4:
一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
#include <stdio.h>
int Duckcount(int village)
{
if(village == 7)
return 2;
// return Duckcount(village - 1) / 2 - 1;
return (Duckcount(village + 1) + 1) * 2;
}
int main ()
{
int village;
printf("请输入经过的村庄个数:\n");
scanf("%d",&village);
int i;
for(i = village;i >= 0;i--)
{
printf("经过第%d个村庄鸭子数:%d\n",i,Duckcount(i));
}
return 0;
}
题目5:
著名的菲波拉契(Fibonacci)数列,其第一项为0,第二项为1,从第三项开始,其每一项都是前两项的和。编程求出该数列前N项数据。
#include <stdio.h>
int Fib(int n)
{
if(n