(1).利用折半查找法找出想要的数字
# include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int k = 8;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else
{
if (arr[mid] < k)
{
left = mid + 1;
}
else
{
break;
}
}
}
if (left <= right)
{
printf("找到了,下标是%d\n", mid);
}
else
{
printf("找不到\n");
}
system("pause");
return 0;
}
(2)用两种方法模拟实现求字符串长度
①常规做法:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strlen(const char *str)
{
int count = 0;
assert(str != NULL);//断言
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char *p = "abcdef";
int len = my_strlen(p);
printf("len=%d\n", len);
system("pause");
return 0;
}
②不创建临时变量(递归)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strlen(const char *str)
{
assert(str != NULL);//断言
if (*str != '\0')
{
return 1 + my_strlen(str + 1);
}
else
{
return 0;
}
}
int main()
{
char *p = "abcdef";
int len = my_strlen(p);
printf("len=%d\n", len);
system("pause");
return 0;
}
3.写一个代码求第n个斐波那契数
①递归(效率低)
#include<stdio.h>
#include<stdlib.h>
int fib(int n)
{
if (n <= 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
int main()
{
int n = 0;
scanf_s("%d", &n);
printf("%d\n", fib(n));
system("pause");
return 0;
}
②非递归方法
#include<stdio.h>
#include<stdlib.h>
int fib(int n)
{
int a = 1;
int b = 1;
int c = a;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf_s("%d", &n);
printf("%d\n", fib(n));
system("pause");
return 0;
}