C语言练习题
16lz
2021-04-05
辗转相除法求最大公约数
对于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;}
©著作权归作者所有:来自51CTO博客作者zzy613的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
- 2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序
- 数组函数、json、ajax、cors跨域
- 一个细节 | Java中asList的缺陷
- js之数组对象与访问器
- 2021-04-03:给定两个字符串str1和str2,想把str2整体插入到str1中的
- 4-3(vector的底层实现)
- int|char数组在sizeof和strlen函数中的应用以及指针的应用
- 4-2(vector)
- 实例ES6演示数组,对象,传参解构; 实例演示访问器属性的get,set操作