代码笔录1

10-16

出入栈序列是否合法

//
// Created by 86184 on 2024/10/16.
//
#include <stdio.h>

//IIOOOIO
int jude(char s[]) {
    int count = 0, i = 0;
    while (s[i] != '\0') {
        if (s[i] == 'I') count++;
        else if (s[i] == 'O') count--;
        else return 0;
        if (count < 0) return 0;
        i++;
    }
    if (count != 0) {
        return 0;
    }
    return 1;
}

int main() {
    char s[128] = {"IIOOO"};
    int flag = 0;
    flag = jude(s);
    if (flag == 0) {
        printf("不合法序列");
    } else {
        printf("合法序列");
    }

    return 0;
}

数字转字符

//
// Created by 86184 on 2024/10/16.
//
#include <stdio.h>

//408 ---> "408"
int NumToSt(int n, char s[], int *i) {
    if (n == 0) return 0;
    int v;
    char c;
    v = n % 10;
    n /= 10;
    c = (char) (v + '0');
    s[*i] = c;
    *i = *i + 1;
    return NumToSt(n, s, i);
}

int main() {
    int i = 0, n = 0;
    char s[128] = {'\0'};
    scanf("%d", &n);
    if (n == 0) s[0] = '0';
    else {
        NumToSt(n, s, &i);
        i = i - 1;
    };
    while (i > -1) {
        printf("%c", s[i]);
        i--;
    }

}

鞍点

//
// Created by 86184 on 2024/10/16.
//
//鞍点
#include <stdio.h>
int main() {
    int i, j, k, max = 0, Max, flag = 1;
    int array[3][3] = {
            {7, 3, 4},
            {7, 4, 5},
            {6, 5, 4}
    };

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (array[i][j] > array[i][max])
                max = j;
        }
        Max = array[i][max];
        for (k = 0; k < 3; k++) {
            if (Max > array[k][max]) {
                flag = 0;
                break;
            }
        }
        printf("%d", flag);
        if (flag == 1)
            printf("鞍点为:(%d,%d) : %d", i, max, Max);
        //归位
        flag = 1;
    }
    return 0;
}

10-28

1-n 中1的个数 同源异形体 矩阵局部最值 直接插入排序

//
// Created by 86184 on 2024/10/28.
//
#include <stdio.h>

void Q1();

void Q2();

void Q3();

void Q4();

void Q5();

int main() {
    int n = 0;
    scanf("%d", &n);
    switch (n) {
        case 1:
            Q1();
            break;
        case 2:
            Q2();
            break;
        case 3:
            Q3();
            break;
        case 4:
            Q4();
            break;
        case 5:
            Q5();
            break;
        default:
            break;
    }
    return 0;
}
//1 - n 中1的个数
void Q1() {
    int n = 0, count = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        int temp = i;
        while (temp != 0) {
            if (temp % 10 == 1) count++;
            temp /= 10;
        }
    }
    printf("%d中有%d个1", n, count);
}
//同源异形体
void Q2() {
    int array[128] = {0};
    int n1 = 0, n2 = 0;
    scanf("%d%d", &n1, &n2);
    while (n1 != 0) {
        array[n1 % 10]++;
        n1 /= 10;
    }
    while (n2 != 0) {
        array[n2 % 10]--;
        n2 /= 10;
    }
    for (int i = 0; i < 10; ++i) {
        if (array[i] != 0) {
            printf("不为异形体");
            return;
        }
    }
    printf("为异形体");
}
//矩阵局部最值
void Q3() {
    int array[128][128] = {0};
    int m = 0, n = 0;
    int i, j;
    //m行n列
    scanf("%d%d", &m, &n);
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &array[i][j]);
        }

    }
    for (i = 1; i < m - 1; i++) {
        for (j = 1; j < n - 1; j++) {
            if (array[i][j] > array[i][j + 1] && array[i][j] > array[i][j - 1]
                && array[i][j] > array[i - 1][j] && array[i][j] > array[i + 1][j])
                printf("array[%d][%d]= %d", i, j, array[i][j]);
        }
    }
}
//直接插入排序
void Q4() {
    int array[128] = {0};
    int n = 0;
    int j, i;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &array[i]);
    }

    for (i = 2; i <= n; ++i) {
        if (array[i] < array[i - 1]) {
            array[0] = array[i];
            for (j = i - 1; array[j] > array[0]; j--) {
                array[j + 1] = array[j];
            }
            array[j + 1] = array[0];
        }
    }
    for (i = 1; i <=n; ++i) {
        printf("%d ", array[i]);
    }
}

//最大公约数
void Q5() {

}

10-29

素数 矩阵移动 整数拆分 数字反转 大公约数 公倍数

//
// Created by 86184 on 2024/10/29.
//
#include <stdio.h>
#include <math.h>

#define MAXSIZE

void Q1();

void Q2();

void Q3();

void Q4();

void Q5();

int dfs(int cur, int sum, int last);

int main() {
    int n = 0;
    scanf("%d", &n);
    switch (n) {
        case 1:
            Q1();
            break;
        case 2:
            Q2();
            break;
        case 3:
            Q3();
            break;
        case 4:
            Q4();
            break;
        case 5:
            Q5();
            break;
        default:
            break;
    }
    return 0;
}

//判断素数
void Q1() {
    int i, j, flag = 0;
    for (i = 2; i <= 100; i++) {
        for (j = 2; j < i; ++j)
            if (i % j == 0) flag = 1;
        if (flag != 1)
            printf("%d ", i);
        flag = 0;
    }
}

//矩阵移动
/*
 1 2 3 4
 2 3 4 1
 */

void Q2() {
    int array[128][128] = {0};
    int n = 0;  //数组长度
    int i, j;
    scanf("%d", &n);
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n && i == 0; ++j)
            array[i][j] = j + 1;
        for (j = 0; j < n && i != 0; ++j)
            //上一行的每个元素向前移动一位
            array[i][(j - 1 + n) % n] = array[i - 1][j];
    }
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j) {
            printf("%d ", array[i][j]);
        }
        putchar('\n');
    }


}

//整数拆分
int n;          // 待分解的数
int nums[100];  // 存储每个组成部分的数值
int size = 0;       // 当前组成部分的数量
int cnt = 0;        // 分解方案的数量

void Q3() {
    scanf("%d", &n);    // 输入待分解的数
    nums[0] = 0;        // 初始化组成部分,第一个数为0
    size = 0;           // 初始化组成部分数量
    dfs(n, 0, 1);      // 开始分解
    printf("%d", cnt);  // 输出分解方案数量
}

int dfs(int cur, int sum, int last) {
    if (cur == 0 && sum == n) {
        cnt++;
        printf("%d = %d ", n, nums[0]);
        for (int j = 1; j < size; ++j) {
            printf("+ %d ", nums[j]);
        }
        printf("\n");
    } else {
        for (int i = 1; i <= cur; i++) {
            if (i >= last && sum + i <= n && i < n) {
                nums[size] = i;
                size++;
                dfs(cur - i, sum + i, i);
                size--;
            }
        }
    }
}

//数字反转
void Q4() {
    int x = 0, n = 0, sum = 0;
    scanf("%d", &n);
    while (n > 0) {
        x = n % 10;
        n /= 10;
        sum = sum * 10 + x;
    }
    printf("%d", sum);
}

//最大公约数 公倍数
void Q5() {
    int a, b, t, c, m, n;
    scanf("%d%d", &a, &b);
    m = a;
    n = b;
    if (a < b) {
        t = b;
        b = a;
        a = t;
    }
    while (b != 0) {
        c = a % b;
        a = b;
        b = c;
    }
    printf("最大公约数为:%d\n", a);
    printf("最大公倍数为:%d", m * n / a);
}

//‌质因数分解‌:
//
//32 = 2 × 2 × 2 × 2 × 2
//40 = 2 × 2 × 2 × 5
//‌求最大公约数‌:
//
//最大公约数是两个数的公有质因数的乘积。在这里,32和40的公有质因数是2、2和2,
//因此最大公约数 = 2 × 2 × 2 = 8‌12。
//‌求最小公倍数‌:
//
//最小公倍数是两个数的所有质因数的乘积,包括独有的质因数。在这里,
//32独有的质因数是2 × 2,40独有的质因数是5,
//因此最小公倍数 = 2 × 2 × 2 × 2 × 2 × 5 = 160‌

10-30

磁盘读写 判断素数 冒泡

//
// Created by 86184 on 2024/10/30.
//
#include <stdio.h>

typedef struct Book {
    char BookName[128];
    char Editor[32];
    double Price;
    char Date[32];
    int number;
} Book;

void Q1();

void Q2();

void Q3();

void Q4();

int Q5();

int main() {
    int n = 0;
    scanf("%d", &n);
    switch (n) {
        case 1:
            Q1();
            break;
        case 2:
            Q2();
            break;
        case 3:
            Q3();
            break;
        case 4:
            Q4();
            break;
        case 5:
            Q5();
            break;
        default:
            break;
    }
    return 0;
}
//磁盘读写
void Q1() {
    FILE *p, *rp;
    Book data[128];
    int i, N;
    scanf("%d", &N);
    if (((p = fopen("C:\\Users\\86184\\Desktop\\code_22\\test\\in.text", "rb")) == NULL) ||
        ((rp = fopen("C:\\Users\\86184\\Desktop\\code_22\\test\\out.text", "wb")) == NULL)) {
        printf("Error!");
        return;
    }
    for (i = 0; i < N; ++i) {
        fread(&data[i], sizeof(data[0]), 1, p);
        if (data[i].Editor == "HanMeiMei")
            if (fwrite(&data[i], sizeof(data[0]), 1, rp) != 1)
                printf("error");
        printf("%s %s %f %s %d\n",
               data[i].BookName, data[i].Editor,
               data[i].Price, data[i].Date, data[i].number);
    }
    fclose(p);
    fclose(rp);
}

void Q2() {
    int array[128] = {1, 9, 5, 4, 2};
    Q3(array, 5);
}

//冒泡排序
void Q3(int array[], int n) {
    int i, j, flag, temp;
    for (i = n - 1; i > 0; i--) {
        flag = 0;
        for (j = 0; j < i; ++j) {
            if (array[j + 1] < array[j]) {
                temp = array[j + 1];
                array[j + 1] = array[j];
                array[j] = temp;
                flag = 1;
            }
        }
        if (flag == 0) break;
    }
    for (i = 0; i < n; ++i) {
        printf("%d ", array[i]);
    }
}

//整数拆分素数
void Q4() {
    int n, flag = 0;
    scanf("%d", &n);
    for (int i = 2; i < n; ++i) {
        if (Q5(i) == 1)
            if (Q5(n - i) == 1) {
                printf("%d = %d + %d\n", n, i, n - i);
                flag = 1;
            }
    }
    if (flag == 0) printf("不可以拆分为两个素数");
}

int Q5(int n) {
    int isPrime = 1;
    for (int i = 2; i < n / 2; ++i) {
        if (n % i == 0) {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

10-31

字符串排序

//
// Created by 86184 on 2024/10/31.
//
#include <stdio.h>
#include <string.h>
#include <malloc.h>

void string_sort(char *s[], int n) {
    int i, j, min;
    char *temp;
    for (i = 0; i < n - 1; ++i) {
        min = i;
        for (j = i + 1; j < n; ++j) {
            if (strcmp(s[min], s[j]) > 0)
                min = j;
        }
        if (min != i) {
            temp = s[min];
            s[min] = s[i];
            s[i] = temp;
        }
    }
}

void print(char *s[], int n) {
    for (int i = 0; i < n; ++i) {
        printf("%s ", s[i]);
    }
}

void Q1() {
    char *s[128];
    char S[128];
    int n = 3;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        s[i] = (char *) malloc(sizeof(char[128]));
        scanf("%s", s[i]);
    }
    string_sort(s, n);
    print(s, n);
}
int main() {
    Q1();
    return 0;
}

11-1

常用函数

//判断素数
int CheckPrime(int n) {
    int isPrime = 1;
    for (int i = 2; i < n / 2; ++i) {
        if (n % 2 == 0) {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

//第n个斐波那契值
int Fibonacci(int n) {
    if (n == 1 || n == 2) {
        return 1;
    } else {
        int f1 = 1, f2 = 1, f3;
        for (int i = 3; i <= n; ++i) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }
}

//字符转数字
int CharToNum(char c) {
    if (c >= 'a' && c <= 'z')
        return c - 'a' + 1;
    else if (c >= 'A' && c <= 'Z') {
        return c - 'A' + 1;
    } else {
        return c - '0';
    }
}

//数字转字符
char NumToChar(int n) {
    if (n >= 0 && n <= 9) {
        return n + '0';
    }
        // 如果 n 是小写字母的 ASCII 值(97-122)
    else if (n >= 97 && n <= 122) {
        return n;
    }
        // 如果 n 是大写字母的 ASCII 值(65-90)
    else if (n >= 65 && n <= 90) {
        return n;
    }
    // 其他情况,返回默认值或错误标识符
    else {
        return '?'; // 可以选择返回一个特定的错误字符
    }
}

删除子串

//
// Created by 86184 on 2024/11/1.
//
#include <stdio.h>
#include <string.h>

int Index(char s[], char t[]) {
    int i = 0, j = 0;
    int l1 = strlen(s);
    int l2 = strlen(t);

    while (i < l1 && j < l2) {
        if (s[i] == t[j]) {
            i++;
            j++;
        } else {
            i = i - j + 1;
            j = 0;
        }

    }
    if (j >= l2) return i - j;
    else return -1;
}

void delete(char s[], int index, int lt) {
    while (lt > 0) {
        for (int i = index; i < strlen(s); ++i) {
            s[i] = s[i + 1];
        }
        lt--;
    }
}
//a b c d
//0 1 2 3
//a c d
//a d
//b c

int main() {
    char s[128] = "Tomcat is a male ccatat";
    char t[] = "cat";
    int index = 0;
    index = Index(s, t);
    while (1) {
        if (index == -1) break;
//        printf("%d\n", index);
        delete(s, index, strlen(t));
        printf("%s ", s);
        index = Index(s, t);
    }
    return 0;
}
//3
//Tom is a male ccatat 15
//Tom is a male cat 14
//Tom is a male

11-3

扑克牌

//
// Created by 86184 on 2024/11/3.
//
#include <stdio.h>
#include <stdlib.h>

typedef struct Card {
    int type; //0--红桃 1--方砖 2--黑桃 3--梅花 4--小王 5--大王
    int point;//1--12 小王--13 大王--14
} Card;

int Compare(struct Card c1, struct Card c2) {
    if (c1.point > c2.point) return 1;
    else if (c1.point < c2.point) return -1;
    else {
        if (c1.type > c2.type) return 1;
        else
            return -1;
    }
}

void Swap(struct Card *c1, struct Card *c2) {
    Card temp;
    temp = *c1;
    *c1 = *c2;
    *c2 = temp;
}

void Sort(struct Card c[], int n) {
    int flag = 0;
    for (int i = n - 1; i > 0; i--) {
        flag = 1;
        for (int j = 0; j < i; j++) {
            if (Compare(c[j], c[j + 1]) == 1) {
                Swap(&c[j], &c[j + 1]);
                flag = 0;
            }
        }
        if (flag == 1) break;
    }
}

void Print(struct Card c[], int n) {
    for (int i = 0; i < n; ++i) {
        char *type = (char *) malloc(sizeof(char) * 128);
        switch (c[i].type) {
            case 0:
                type = "红桃";
                break;
            case 1:
                type = "方砖";
                break;
            case 2:
                type = "黑桃";
                break;
            case 3:
                type = "梅花";
                break;
            case 4:
                type = "小王";
                break;
            case 5:
                type = "大王";
                break;
        }
        if (c[i].point == 13)
            printf("%s\n", "小王");
        else if (c[i].point == 14)
            printf("%s\n", "大王");
        else
            printf("%s:%d\n", type, c[i].point);
    }
}

int main() {
    struct Card c[128] = {
            {1, 1},
            {2, 10},
            {2, 6},
            {3, 6},
            {4, 13},
            {4, 14}
    };
    Sort(c, 6);
    Print(c, 6);
    return 0;
}

奇偶交替

//
// Created by 86184 on 2024/11/3.
//
#include <stdio.h>

void JudgeNum(int n) {
    int flag = 1;
    //2321
    //12321
    int temp = n;
    while (temp > 10) {
        if (temp % 10 == temp / 10 % 10) {
            flag = 0;
            break;
        }
        temp /= 10;

    }
    if (flag == 1) printf("%d是奇偶交替数!\n", n);
    if (flag == 0) printf("%d不是奇偶交替数!\n", n);
}


int main() {
    JudgeNum(12321);
    JudgeNum(2321);
    JudgeNum(232);
    JudgeNum(22);
}
相关推荐
XH华2 小时前
初识C语言之二维数组(下)
c语言·算法
南宫生3 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_3 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
落魄君子3 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
菜鸡中的奋斗鸡→挣扎鸡3 小时前
滑动窗口 + 算法复习
数据结构·算法
Lenyiin3 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
郭wes代码3 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
scan7244 小时前
LILAC采样算法
人工智能·算法·机器学习
菌菌的快乐生活4 小时前
理解支持向量机
算法·机器学习·支持向量机
大山同学4 小时前
第三章线性判别函数(二)
线性代数·算法·机器学习