C語言練習題

展轉相除法求最大公約數

對於x,y,假設它倆有一個最大公因數T,則(nx+my)%T==0數組

緣由:x=T+T+T+T+T····· y=T+T+T+T+T······ide

x/y=v······w code

-->x=v*y+w排序

-->w=1x+(-v)y 即x%y的餘數也可以被最大公因數整除it

x>y-->x=x%y y-->y=y%xio

#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;
}

使用二分查找法在整形有序數組中查找某個數

!!!使用二分查找法必需要是有序數組class

第一點:首先要肯定數組的長度,使用sizeof(arr) / sizeof(arr[0])來肯定di

第二點:最左邊下標爲start,最右邊爲end,中間爲 int min=(start+end)/2view

第三點:判斷這個數(a)和二分排序法肯定的中間數(mid)的大小vi

​ 若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;
}
相關文章
相關標籤/搜索