//1、斐波那契数列
//1 1 2 3 5 8 13 21 34 55 89 144 ....
//2、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法:
//
//如果a除以b能整除,则最大公约数是b。
//
//否则,最大公约数等于b和a%b的最大公约数。
//
//Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。最后,修改你的程序使之适用于所有整数,而不仅仅是正整数。
//3、趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。
练习:
1. 封装一个函数,输出两个整数里的较大那个
2. 封装一个函数,输出两个浮点数里的较小那个
3. 封装一个函数,来判读一个字符是否是大写字母
如果是,返回1,否则返回0!
4. 封装一个函数,来判读一个字符是否是数字字符
如果是,返回1,否则返回0!
5. 封装一个函数,来判读一个字符是否是英文字母
如果是,返回1,否则返回0!
6. 封装一个函数,传入一个字符,如果是大写那么转化小写然后返回,否则保持不变返回
----------------------------------------------------
7. 输入一个字母判断是星期几!
T S 一个字母没法判断,这时需要输入第二个字母再判断是星期几。
MON TUS WED THU FRI STA SUN
实现一个函数,传入一个字符,函数里打印结果 (函数里,如果第一个字符无法判断,函数可以接收第二个字符!)
#include <stdio.h>
//小明一次可以爬一级或者二级台阶试问n级台阶小明来走共有几种走法
//示例:
//台阶数1 走法1
//台阶数2 走法2 1. 一级一级 2.二级
//台阶数3走法3 1.一级一级 一级 2.一级二级3.二级一级
//4 1111 121 211 112 22
//5
//int func(int n)
//{
// if (n==1)
// {
// return 1;
// }
// else if (n==2)
// {
// return 2;
// }
// else
// {
// return func(n-1)+func(n-2);
// }
//}
//
//int main(int argc, const char * argv[])
//{
//
// // insert code here...
// printf("%d\n",func(6));
// return 0;
//}
//从键盘输入个数不定的字符串(不超过10个),把这些字符串放入一个数组中,然后再输入一个字符串,输入两个数n和m(n是数组的下标,m是从下标n开始数m个字符串),从下标n开始数m个字符串进行查找输入的最后一个字符串;找到之后,有几个就删除几个。后面没有被删除的字符串前移。(不要超过范围)
//比如:
//输入:
//I am Optimus Prime lucy
//am
//0 2
//输出为
//I
//Optimus
//Prime
//lucy
//输入:
//Hi welcome to to qianfeng lilei
//haha
//1 2
//输出为
//Hi
//welcome
//to
//to
//qianfeng
//lilei
#include <stdlib.h>
#include <string.h>
/*
int main(int argc,const char *argv[])
{
int cnt =0;
char *pstr[10]={NULL};
for (int i=0; i<10; i++) {
pstr[i]=(char *)malloc(50);
scanf("%s",pstr[i]);
cnt++;
if (getchar()=='\n') {
break;
}
}
char substr[50]={};
int n,m;
scanf("%s %d %d",substr,&n,&m);
for (int i=n; i<n+(m>cnt?cnt:m); i++) {
if (strcmp(substr,pstr[i])==0) {
free(pstr[i]);
pstr[i]=NULL;
}
}
for (int i=0; i<cnt; i++) {
if(pstr[i])
{
printf("%s\n", pstr[i]);
}
}
return 0;
}*/
//1000
//2
//phone
//10phone00
/*
int main(int argc,const char *argv[])
{
char str1[100]={};
char str2[50]={};
int index;
scanf("%s %s %d", str1, str2, &index);
int len1 = (int)strlen(&str1[index]);
int len2 = (int)strlen(str2);
memmove(&str1[index]+len2, &str1[index], len1);
str1[index+len1+len2]='\0';
strncpy(&str1[index], str2, len2);
printf("%s\n", str1);
return 0;
}*/
//返回在两字符串中第一个相同的子串(大于1个字符),并将子串输出
//比如:
//输入
//adbAFEHHFS
//acwfagAFEf
//输出为
//AFE
//
//输入
//qfdgJKlin
//qdfgJKwfo
//输出为
//gJK
/*#include <string.h>
int main(int argc,const char *argv[])
{
char str1[100]={};
char str2[100]={};
int i=0;
char *pstr1 = NULL;
char *pstr2 = NULL;
scanf("%s %s", str1,str2);
int len1 = (int)strlen(str1);
int len2 = (int)strlen(str2);
for (i=0; i<len2-1; i++) {
pstr1 = (char *)memmem(str1, len1, &str2[i], 2);
if (pstr1) {
break;
}
}
pstr2 = &str2[i];
while (*pstr1 == *pstr2) {
pstr1++;
pstr2++;
}
*pstr2 = '\0';
printf("%s\n", &str2[i]);
return 0;
}*/
//samsamcomcom
//ssaammmmccoo
int main(int argc,constchar *argv[])
{
char str[100]={};
scanf("%s",str);
int len = (int)strlen(str);
for (int i=0; i<len; i++) {
char ch = str[i];
for (int j=i+1; j<len; j++) {
if (str[j]==ch) {
memmove(&str[i+1], &str[i], j-i);
str[i+1]=ch;
break;
}
}
}
printf("%s\n",str);
return 0;
}
//递归:函数直接或者间接的调用本身,那么这个函数是递归的
//n! = n*(n-1)!
//(n-1)! = (n-1)(n-2)!
//
//1! = 1
//求n!
//5 = 5*4! 120
//4!= 4*3! 24
//3!= 3*2! 6
//2!= 2*1! 2
//1!= 1
//factrial(2)=2*factrial(1)
//factrial(3)=3*factrial(2)=3*2*factrial(1)
//int factrial(int n)
//{
// if (n==1)
// {
// return 1;
// }
// return n*factrial(n-1);
//}
//
//int main(int argc, const char *argv[])
//{
//
// printf("%d\n",factrial(5));
//
// return 0;
//}
//void change_val(int a,int b)
//{
// int val1, val2;
// val1 = a;
// val2 = b;
// printf("val1 = %d val2 = %d\n", val1, val2);
// printf("val1 = %p, val2 = %p\n",&val1, &val2);//%p打印地址
//}
//
//void change_val2(void)
//{
// int a=3, b=5;
// change_val(a, b);
// //printf("%p %p\n",&a,&b);
//
//}
//
//int main(int argc,const char *argv[])
//{
// change_val(3, 5);
// //change_val(4, 6);
//
// change_val2();
// return 0;
//}
//1、斐波那契数列
//1 1 2 3 5 8 13 21 34 55 89 144 ....
//int fabonaci(int n)
//{
// if (n==1 || n==2) {
// return 1;
// }
// return fabonaci(n-1)+fabonaci(n-2);
//}
//
//int main(int argc,const char *argv[])
//{
// for (int i=1; i<=50; i++) {
// printf("%d ",fabonaci(i));
// }
// printf("\n");
// return 0;
//}
//2、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法:
//
//如果a除以b能整除,则最大公约数是b。
//
//否则,最大公约数等于b和a%b的最大公约数。
//
//Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。最后,修改你的程序使之适用于所有整数,而不仅仅是正整数。
//3、趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。
//int euclid(int a,int b)
//{
// if(a%b==0)
// {
// return b;
// }
// return euclid(b, a%b);
//}
//
//int main(int argc,const char *argv[])
//{
// printf("%d\n", euclid(319, 377));
//
// return 0;
//}
//int age(int n)
//{
// if (n==1) {
// return 10;
// }
// return 2+age(n-1);
//}
//
//int main(int argc, const char *argv[])
//{
// printf("%d ", age(5));
// return 0;
//}