C語言部分常用算法

編譯環境:VS2017

注:本文所有代碼都是參考網上其他博客代碼,再加以改進整理寫成的。

1. 八進制轉十進制
 

#pragma warning(disable : 4996)
#include<stdio.h>
#include<math.h>

int main() {
    int n;
    int i = 0;
    int result = 0;
    scanf("%d", &n);
    while (n != 0) {
        result += (n % 10) * pow(8, i);
        n /= 10;
        i++;
    }
    printf("%d\n", result);
    system("pause");
}

2. 十進制轉八進制
 

#pragma warning(disable : 4996)
#include<stdio.h>
#include<math.h>

int main() {
    int n;
    int i = 0;
    int result = 0;
    scanf("%d", &n);
    while (n != 0) {
        result += (n % 8) * pow(10, i);
        n /= 8;
        i++;
    }
    printf("%d\n", result);
    system("pause");
}

3. 冒泡排序

#pragma warning(disable : 4996)
#include<stdio.h>
#define N 10

int main() {
    int a[] = { 1057, 3, 27, 8, 87, -1, 0, 87, 55, 400 };
    int length = N;
    for (int i = 0; i < N - 1; i++) {
        for (int j = 0; j < N - i - 1; j++) {
            if (a[j] > a[j + 1]) {
                int temp = a[j + 1];
                a[j + 1] = a[j];
                a[j] = temp;
            }
        }
    }
    for (int i = 0; i < N; i++) {
        printf("%d\t", a[i]);
    }
    printf("\n");
    system("pause");
}

4. 選擇排序

#pragma warning(disable : 4996)
#include<stdio.h>
#define N 10

int main() {
    int a[] = { 1057, 3, 27, 8, 87, -1, 0, 87, 55, 400 };
    int length = N;
    int index;
    for (int i = 0; i < N - 1; i++) {
        index = i;
        for (int j = i + 1; j < N; j++) {
            if (a[index] > a[j]) {
                index = j;
            }
        }
        int temp = a[i];
        a[i] = a[index];
        a[index] = temp;
    }
    for (int i = 0; i < N; i++) {
        printf("%d\t", a[i]);
    }
    printf("\n");
    system("pause");
}

5. 插入排序

#pragma warning(disable : 4996)
#include<stdio.h>
#define N 10

int main() {
    int a[] = { 1057, 3, 27, 8, 87, -1, 0, 87, 55, 400 };
    int length = N;
    for (int i = 1; i < N; i++) {
        int j = i - 1;
        int current = a[i];
        while (j >= 0 && a[j] > current) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = current;
    }
    for (int i = 0; i < N; i++) {
        printf("%d\t", a[i]);
    }
    printf("\n");
    system("pause");
}

6. 數字轉字符串

#pragma warning(disable : 4996)
#include<stdio.h>
#define N 10

int main() {
    int n;
    char ch[N];
    int length = 0;
    scanf("%d", &n);
    while (n != 0) {
        ch[length] = n % 10 + '0';
        n /= 10;
        length++;
    }
    for (int i = length - 1; i >= 0; i--) {
        printf("%c", ch[i]);
    }
    printf("\n");
    system("pause");
}

7. 字符串轉數字

#pragma warning(disable : 4996)
#include<stdio.h>
#define N 10

int main() {
    int n = 0;
    char ch[N];
    int length = 0;
    scanf("%s", ch);
    while (ch[length] != '\0') {
        n = n * 10 + ch[length] - '0';
        length++;
    }
    printf("%d\n", n);
    system("pause");
}

8. 二分查找

#pragma warning(disable : 4996)
#include<stdio.h>
#define N 10

int BinarySearch(int a[], int start, int end, int value) {
    if (start > end) {
        return -1;
    }
    int middle = (start + end) / 2;
    if (value == a[middle]) {
        return middle;
    }
    else if (value < a[middle]) {
        return BinarySearch(a, start, middle - 1, value);
    }
    else if (value > a[middle]) {
        return BinarySearch(a, middle + 1, end, value);
    }
}

int main() {
    int a[] = { -1, 0, 3, 8, 27, 55, 87, 101, 400, 1057 };
    int n;
    scanf("%d", &n);
    printf("%d\n", BinarySearch(a, 0, N - 1, n));
    system("pause");
}

9. 漢諾塔
 

#pragma warning(disable : 4996)
#include<stdio.h>

int move(int n, char from, char to) {
    printf("把圓盤%d從%c塔移動到%c塔\n", n, from, to);
}

int Hanoi(int n, char A, char B, char C) {
    static int count = 0;
    if (n == 1) {
        move(1, A, C);
        return ++count;
    }
    else if (n > 1) {
        Hanoi(n - 1, A, C, B);
        move(n, A, C);
        Hanoi(n - 1, B, A, C);
        ++count;
    }
}

int main() {
    int n;
    scanf("%d", &n);
    printf("移動次數:%d\n", Hanoi(n, 'A', 'B', 'C'));
    system("pause");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章