1.辗转相除法
通过辗转相除法计算最大公约数和最小公倍数。
两个数m和n,用while循环判断m%n是否为真,最后m%n = 0时就找到了最大公约数。再设置一个变量r,最后r的结果即为最大公约数。
实现过程:1.r = m % n 2.m = n 3. n = r 一直循环这个过程即可得到最大公约数。
最后,我认为后面应该加上以下if语句,来应对m % n = 0的情况。
int main()
{
int m = 24;
int n = 18;
int r = 0;
while (m % n)
{
r = m % n;
m = n;
n = r;
}
//我认为该处应该加上这个,来应对m % n = 0的情况
if (m % n == 0)
r = n;
else if (n % m == 0)
r = m;
printf("%d\n", n);
return 0;
}
2.二分查找(折半查找)
用二分查找查找某一个数。
假如要查找的数是7,4作为数组中间元素的下标,可以锁定元素5,中间元素则为5,5与7比较,5要小,被查找的范围变为6~10,6的下标为5,10的下标为9,5和9的平均值为7,找i到中间元素的下标为7,锁定元素8。用8和7比较,8要大,被查找的范围变为6~7,6的下标为5,7的下标为6,5和6的平均值为5余1,5作为中间元素的下标,锁定元素6,6和7比较,6要小,被查找的范围只剩下7,7的下标为6,左右都为6,平均值为6,锁定元素7。二分查找结束。
int main()
{
int k = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int left = 0;//左下标
int right = sz - 1;右下标
scanf("%d", &k);
while (left <= right)
{
int mid = (left + right) / 2;//中间元素下标
if (k > arr[mid])
{
left = mid + 1;
}
else if (k < arr[mid])
{
right = mid - 1;
}
else
{
printf("找到了,下标是%d\n", mid);
break;
}
}
if (left > right)
printf("找不到");
return 0;
}