简单算法入门

来源:互联网 发布:Ai人工智能武汉 编辑:程序博客网 时间:2024/06/03 04:10

筛选列举质数
这里写图片描述
这里写图片描述
这里写图片描述

#include <cstdio>int main() {    int n = 15;    int mark[16] = {        1, 1, 0, 0,        0, 0, 0, 0,        0, 0, 0, 0,        0, 0, 0, 0    };    int c;    int j;    for (c = 2; c * c <= n; c++) {    if ( mark[c] != 1){        for ( j = 2; j <= n/c; j++){            mark[c*j] = 1;        }    }    }    for ( c = 2; c <= n; c++){        if ( mark[c] != 1) {            printf("%d\n", c);        }    }    return 0;}

指定范围的质数
这里写图片描述

#include <cstdio>#include <cstring>#include <iostream>using namespace std;int n = 1000000;int mark[1000001];int main() {    memset(mark, 0, sizeof(mark));    mark[0] = 1;    mark[1] = 1;    int c;    for (c = 2; c * c <= n; c++) {       if (mark[c] != 1) {        for (int j = 2; j <= n/c; j++) {            mark[c * j] = 1;           }       }    }    int N,M;    while (cin >> N >> M) {        for (c = M; c <= N; ++c) {            if (mark[c] != 1) {                cout << c << endl;            }        }    }    return 0;}

线性查找
这里写图片描述

#include <cstdio>#include <cmath>void find_nine(int numbers[]) {    int i;    for (i = 0; i < 15; i++){        if (numbers[i] == 9){            printf("%d\n",i);           return;        }    }    printf("null");}int main() {    int numbers[15];    int i;    for (i = 0; i < 15; i++) {        scanf("%d", &numbers[i]);    }    find_nine(numbers);    return 0;}

折半查找
伪代码:

function BinarySearch(List, key)    left = 0, right = List.length - 1    while left <= right        mid = (left + right) / 2        if List[mid] is key            return mid        if List[mid] < key            left = mid + 1        else            right = mid - 1    return -1

这里写图片描述
这里写图片描述

#include <cstdio>#include <iostream>using namespace std;int main() {    int n;    int k;    int numbers[1000001];    int m;    int i;    // 反复读入数字和查找数字的数量    while (scanf("%d %d", &n, &k) != EOF) {        // 读入给定的数字        for (i = 0; i < n; i++) {            scanf("%d", &numbers[i]);        }        for (int j = 0; j < k; j++) {            // 读入待查找的数字,            scanf("%d", &m);            // 请在下面完成查找读入数字的功能            int left = 0, right = n - 1;            int mid;            while (left <= right) {                mid = (left + right) / 2;                if (numbers[mid] == m && j == 0) {                    cout << mid + 1 ;                    break;                }                if (numbers[mid] == m && j != 0) {                    cout << " " << mid + 1 ;                    break;                }                if (numbers[mid] > m) {                    right = mid - 1;                }                else {                    left = mid + 1;                }            }            if (left > right && j == 0) {                cout << "0" ;            }            if (left > right && j != 0) {                cout << " " << "0" ;            }        }    }    return 0;}

递推数组
斐波拉契数列

炊饼问题
这里写图片描述
这里写图片描述
这里写图片描述

#include <cstdio>int main() {    int x = 100;    int i;    int part[101];    part[0] = 1;    for (i = 1; i <= x; i++) {        part[i] = part[i - 1] + i;    }    printf("There are %d parts after 100 cuts\n", part[x]);    return 0;}

爬楼梯
这里写图片描述
这里写图片描述
这里写图片描述

#include <cstdio>#include <iostream>using namespace std;int main() {    int n;    int step[50];    step[0] = 0, step[1] = 1, step[2] = 1;    for(int i = 3; i <= 49; ++i){        step[i] = step[i - 2] + step[i - 3];    }    // 反复读入数字和查找数字的数量    while (scanf("%d", &n) != EOF) {        // 读入给定的数字        printf("%d\n",step[n - 1]);        }    return 0;}

冒泡排序与选择排序

//BubbleSort#include <cstdio>int main() {    int n = 10;    int m;    int num[10];    int i;    // 读入给定的数字    for (i = 0; i < n; i++) {        scanf("%d", &num[i]);    }    for (int j = 0; j < 9; j++) {        for (i = 0; i < 9 - j; i++) {            if(num[i] < num[i + 1]){               int k = num[i];               num[i] = num[i + 1];               num[i + 1] = k;              }        }    }    for(int i = 0; i < 9; ++i){        printf("%d ",num[i]);    }    printf("%d",num[9]);    return 0;}

这里写图片描述

//SelectSort#include <cstdio>int main() {    int n = 10;    int num[10];    // 读入给定的数字    for (int i = 0; i < n; i++) {        scanf("%d", &num[i]);    }    for (int i = 0; i < 9; i++) {        int m = num[i];        int k = i;        for (int j = i + 1 ; j < 10; j++) {            if(num[j] > m){                m = num[j];                k = j;            }        }        num[k] = num[i];        num[i] = m;    }    for(int i = 0; i < 9; ++i){        printf("%d ",num[i]);    }    printf("%d",num[9]);    return 0;}