辗转相除法求最大公约数对于x,y,假设它俩有一个最大公因数T,则(nx+my)%T==0原因:x=T+T+T+T+T y=T+T+T+T+Tx/y=vw --x=v*y+w--w=1x+(-v)y 即x%y的余数也能够被最大公因数整除xy--x=x%y y--...
辗转相除法求最大公约数
对于x,y,假设它俩有一个最大公因数T,则(nx+my)%T==0
原因:x=T+T+T+T+T····· y=T+T+T+T+T······
x/y=v······w
-->x=v*y+w
-->w=1x+(-v)y 即x%y的余数也能够被最大公因数整除
x>y-->x=x%y y-->y=y%x
#include<stdio.h>
int main()
{
int x = 75, y = 100;
int z = 0;
while (z = x % y)
{
x = y;
y = z;
}
printf("%d", y);
return 0;
}
使用二分查找法在整形有序数组中查找某个数
!!!使用二分查找法必须要是有序数组
第一点:首先要确定数组的长度,使用sizeof(arr) / sizeof(arr[0])来确定
第二点:最左边下标为start,最右边为end,中间为 int min=(start+end)/2
第三点:判断这个数(a)和二分排序法确定的中间数(mid)的大小
? 若a > arr[mid]---->则a的下标与数组左半边无关系,即start = mid+1
? 若a < arr[mid]---->则a的下标与数组右半边无关系,即start = mid-1
#include<stdio.h>
int main()
{
int arr[] = { 1,5,8,42,55,67,78,82,93,130 };
int c = sizeof(arr) / sizeof(arr[0]);
int a = 130;
int start = 0, end = c - 1;
while (1)
{
int mid = (start + end) / 2;
if (a > arr[mid])
{
start = mid+1;
}
else if(a < arr[mid])
{
end = mid-1;
}
else
{
printf("%d", mid);
break;
}
}
return 0;
}
本文标题为:C语言练习题
- ubuntu下C/C++获取剩余内存 2023-09-18
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- Qt计时器使用方法详解 2023-05-30
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言详解float类型在内存中的存储方式 2023-03-27
- Easyx实现扫雷游戏 2023-02-06
- C++ 数据结构超详细讲解顺序表 2023-03-25
