2021年03月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

news2024/12/23 18:31:35

在这里插入图片描述

第1题:生日相同 2.0

在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
时间限制:1000
内存限制:65536
输入
第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
运行测试
控制台:清理控制台

这个问题可以使用哈希表来解决,其中哈希表的键为日期,值为具有相同生日的学生名字的链表。我们可以遍历所有学生,将具有相同日期的学生名字添加到对应日期的链表中。

下面是一个使用哈希表的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LENGTH 20
#define MAX_STUDENTS 180

typedef struct Student {
    char name[MAX_NAME_LENGTH];
    int month;
    int day;
    struct Student* next;
} Student;

typedef struct {
    int month;
    int day;
    Student* students;
} Birthday;

int hash(int month, int day) {
    return (month - 1) * 31 + day;
}

void insertStudent(Student** head, Student* student) {
    student->next = *head;
    *head = student;
}

void printStudents(Student* students) {
    if (students == NULL) {
        return;
    }

    printStudents(students->next);
    printf("%s ", students->name);
}

int main() {
    int n;
    scanf("%d", &n);

    Birthday birthdays[366]; // 闰年最多366天
    memset(birthdays, 0, sizeof(birthdays));

    for (int i = 0; i < n; i++) {
        Student* student = (Student*)malloc(sizeof(Student));
        scanf("%s %d %d", student->name, &(student->month), &(student->day));
        student->next = NULL;

        int index = hash(student->month, student->day);
        insertStudent(&(birthdays[index].students), student);
        birthdays[index].month = student->month;
        birthdays[index].day = student->day;
    }

    int found = 0;

    for (int i = 0; i < 366; i++) {
        if (birthdays[i].students != NULL) {
            if (found) {
                printf("\n");
            }

            printf("%d %d ", birthdays[i].month, birthdays[i].day);
            printStudents(birthdays[i].students);

            found = 1;
        }
    }

    if (!found) {
        printf("None");
    }

    printf("\n");

    // 释放内存
    for (int i = 0; i < 366; i++) {
        Student* curr = birthdays[i].students;
        while (curr != NULL) {
            Student* temp = curr;
            curr = curr->next;
            free(temp);
        }
    }

    return 0;
}

在这段代码中,我们首先定义了一个Student结构体,用于存储学生的信息,包括名字、月份和日期,并添加了一个指针next,用于构建链表。然后,我们定义了一个Birthday结构体,用于存储具有相同生日的学生的链表以及生日的月份和日期。

hash函数中,我们使用月份和日期来计算哈希值,以便将学生插入到对应的生日链表中。

insertStudent函数用于将学生插入到链表的头部。

printStudents函数用于递归地打印链表中的学生名字,按照从后往前的顺序打印。

main函数中,我们首先读取学生的数量,并声明一个大小为366的Birthday数组来存储生日信息。然后,我们遍历所有学生,将具有相同生日的学生名字插入到对应的生日链表中。同时,我们记录每个生日的月份和日期。

接下来,我们遍历Birthday数组,如果该生日有学生,就按照要求输出生日信息和学生名字。最后,如果没有找到生日相同的学生,我们输出"None"。

你可以将题目给出的示例输入复制到代码中进行测试。记得在程序结束后释放动态分配的内存。

请注意,本代码中的哈希函数是简单的计算方法,不考虑具体的日期和月份的对应关系。在实际应用中,可以根据实际需求设计更合适的哈希函数。

第2题:机器翻译

VariantF的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。
假设内存中有M 个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M,软件会将新单词存入一个未使用的内存单元;若内存中已存入M 个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。
假设一篇英语文章的长度为N 个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。
时间限制:1000
内存限制:262144
输入
第一行为两个正整数M 和N,代表内存容量和文章的长度。 第二行为N 个非负整数,按照文章的顺序,每个数(大小不超过1000000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。 对于50%的数据,1<=N、M<=1000; 对于100%的数据,1<=N、M<=1000000。
输出
一个整数,为软件需要查词典的次数。
样例输入
3 7
1 2 1 5 4 4 1
样例输出
5
提示
整个查字典过程如下:每行表示一个单词的翻译,冒号前为本次翻译后的内存状况: 空:内存初始状态为空。 1. 1:查找单词1 并调入内存。 2. 1 2:查找单词2 并调入内存。 3. 1 2:在内存中找到单词1。 4. 1 2 5:查找单词5 并调入内存。 5. 2 5 4:查找单词4 并调入内存替代单词1。 6. 2 5 4:在内存中找到单词4。 7. 5 4 1:查找单词1 并调入内存替代单词2。 共计查了5 次词典。
运行测试

这个问题可以使用哈希表和队列来解决。我们可以使用哈希表来实现内存,将单词作为键,译义作为值,以便快速查找和更新译义。同时,我们可以使用队列来实现内存中单词的先后顺序,保证最早进入内存的单词被清空。

下面是一个使用哈希表和队列的示例代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX_N 1000000

typedef struct {
    int word;
    int translation;
} Entry;

typedef struct {
    Entry entries[MAX_N];
    int front;
    int rear;
} Queue;

typedef struct {
    int capacity;
    int size;
    Entry* entries;
} HashTable;

void initializeQueue(Queue* queue) {
    queue->front = 0;
    queue->rear = 0;
}

void enqueue(Queue* queue, Entry entry) {
    queue->entries[queue->rear] = entry;
    queue->rear = (queue->rear + 1) % MAX_N;
}

Entry dequeue(Queue* queue) {
    Entry entry = queue->entries[queue->front];
    queue->front = (queue->front + 1) % MAX_N;
    return entry;
}

void initializeHashTable(HashTable* hashTable, int capacity) {
    hashTable->capacity = capacity;
    hashTable->size = 0;
    hashTable->entries = (Entry*)malloc(capacity * sizeof(Entry));
}

int findTranslation(HashTable* hashTable, int word) {
    for (int i = 0; i < hashTable->size; i++) {
        if (hashTable->entries[i].word == word) {
            return hashTable->entries[i].translation;
        }
    }
    return -1;
}

void insertTranslation(HashTable* hashTable, int word, int translation) {
    if (hashTable->size < hashTable->capacity) {
        hashTable->entries[hashTable->size].word = word;
        hashTable->entries[hashTable->size].translation = translation;
        hashTable->size++;
    } else {
        for (int i = 0; i < hashTable->size - 1; i++) {
            hashTable->entries[i] = hashTable->entries[i + 1];
        }
        hashTable->entries[hashTable->size - 1].word = word;
        hashTable->entries[hashTable->size - 1].translation = translation;
    }
}

int main() {
    int M, N;
    scanf("%d %d", &M, &N);

    int* words = (int*)malloc(N * sizeof(int));
    for (int i = 0; i < N; i++) {
        scanf("%d", &words[i]);
    }

    Queue queue;
    initializeQueue(&queue);

    HashTable hashTable;
    initializeHashTable(&hashTable, M);

    int dictionaryLookups = 0;

    for (int i = 0; i < N; i++) {
        int word = words[i];
        int translation = findTranslation(&hashTable, word);

        if (translation == -1) {
            dictionaryLookups++;
            translation = word; // 假设将单词本身作为译义

            if (hashTable.size < hashTable.capacity) {
                insertTranslation(&hashTable, word, translation);
            } else {
                Entry entry = dequeue(&queue);
                insertTranslation(&hashTable, word, translation);
                enqueue(&queue, entry);
            }
        }

        enqueue(&queue, (Entry){word, translation});

        printf("%d\n", dictionaryLookups);
    }

    free(words);
    free(hashTable.entries);

    return 0;
}

在这段代码中,我们首先定义了Entry结构体,用于存储单词和译义的对应关系。

然后,我们定义了Queue结构体,用于实现内存中单词的先后顺序。队列使用循环数组来实现,包含一个前端指针front和一个后端指针rear

接着,我们定义了HashTable结构体,用于实现哈希表。哈希表使用线性探测法解决冲突,包含一个容量capacity、一个当前大小size和一个存储Entry结构体的数组entries

initializeQueue函数用于初始化队列。

enqueue函数用于将单词存入队列。

dequeue函数用于从队列中取出最早进入的单词。

initializeHashTable函数用于初始化哈希表。

findTranslation函数用于在哈希表中查找单词的译义。

insertTranslation函数用于将单词和译义插入哈希表。

main函数中,我们首先读取输入的内存容量M和文章长度N,然后读取文章中的单词,并存储在words数组中。

接下来,我们初始化队列和哈希表,并定义一个变量dictionaryLookups用于记录查词典的次数。

然后,我们遍历文章中的每个单词,对于每个单词,我们首先在哈希表中查找译义。如果找到译义,则直接使用;如果未找到译义,则进行查词典的操作:增加dictionaryLookups计数,将单词和译义插入哈希表,并将最早进入内存的单词从队列中移除。

最后,我们输出dictionaryLookups的值,表示查词典的次数。

这样,我们就可以通过使用哈希表和队列来实现该机器翻译软件,并计算出需要查词典的次数。

第3题:括号画家

Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的:
(1) 空的括号序列是美观的;
(2) 若括号序列A是美观的,则括号序列(A)、[A]、{A}也是美观的;
(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的;
例如 (){} 是美观的括号序列,而 )({)[}]( 则不是。
现在Candela想知道她画出的括号序列是不是美观的。你能帮帮她吗?
时间限制:1000
内存限制:262144
输入
一个括号序列,长度不超过10000。
输出
如果它是美观的,输出Yes,否则输出No。
样例输入
{}(){}
样例输出
Yes

下面是一个使用栈的示例代码,来判断给定的括号序列是否是美观的:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char bracket;
    struct Node* next;
} Node;

typedef struct {
    Node* top;
} Stack;

void initializeStack(Stack* stack) {
    stack->top = NULL;
}

int isEmpty(Stack* stack) {
    return stack->top == NULL;
}

void push(Stack* stack, char bracket) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->bracket = bracket;
    newNode->next = stack->top;
    stack->top = newNode;
}

char pop(Stack* stack) {
    if (isEmpty(stack)) {
        printf("Error: Stack is empty.\n");
        exit(EXIT_FAILURE);
    }
    char bracket = stack->top->bracket;
    Node* temp = stack->top;
    stack->top = stack->top->next;
    free(temp);
    return bracket;
}

int isMatchingPair(char opening, char closing) {
    if (opening == '(' && closing == ')')
        return 1;
    else if (opening == '[' && closing == ']')
        return 1;
    else if (opening == '{' && closing == '}')
        return 1;
    else
        return 0;
}

int isBeautiful(char* expression) {
    Stack stack;
    initializeStack(&stack);

    for (int i = 0; expression[i] != '\0'; i++) {
        if (expression[i] == '(' || expression[i] == '[' || expression[i] == '{')
            push(&stack, expression[i]);
        else if (expression[i] == ')' || expression[i] == ']' || expression[i] == '}') {
            if (isEmpty(&stack) || !isMatchingPair(pop(&stack), expression[i]))
                return 0;
        }
    }

    return isEmpty(&stack);
}

int main() {
    char expression[10000];
    scanf("%s", expression);

    if (isBeautiful(expression))
        printf("Yes\n");
    else
        printf("No\n");

    return 0;
}

在这段代码中,我们定义了Node结构体,用于表示栈中的节点。每个节点包含一个括号字符和一个指向下一个节点的指针。

然后,我们定义了Stack结构体,用于表示栈。栈包含一个指向栈顶节点的指针。

initializeStack函数用于初始化栈。

isEmpty函数用于检查栈是否为空。

push函数用于将括号字符压入栈中。

pop函数用于从栈中弹出括号字符。

isMatchingPair函数用于检查给定的开括号和闭括号是否匹配。

isBeautiful函数用于判断括号序列是否是美观的。函数遍历给定的括号序列,遇到开括号则将其压入栈中,遇到闭括号则从栈中弹出一个开括号进行匹配。如果遍历完所有字符后,栈为空,则括号序列是美观的。

main函数中,我们首先读取输入的括号序列,然后调用isBeautiful函数判断括号序列是否是美观的。根据判断结果输出"Yes"或"No"。

这样,我们就可以使用栈来判断给定的括号序列是否是美观的。

第4题:中缀表达式的值

人们熟悉的四则运算表达式称为中缀表达式,例如(23+34*45/(5+6+7))。在程序设计语言中,可以利用堆栈的方法把中缀表达式转换成保值的后缀表达式(又称逆波兰表示法),并最终变为计算机可以直接执行的指令,得到表达式的值。 给定一个中缀表达式,编写程序,利用堆栈的方法,计算表达式的值。
时间限制:200
内存限制:65536
输入
第一行为测试数据的组数N 接下来的N行,每行是一个中缀表达式。表达式中只含数字、四则运算符和圆括号,操作数都是正整数,数和运算符、括号之间没有空格。中缀表达式的字符串长度不超过600。
输出
对每一组测试数据输出一行,为表达式的值
样例输入
3
3+5*8
(3+5)*8
(23+34*45/(5+6+7))
样例输出
43
64
108
提示
注意:运算过程均为整数运算(除法运算’/'即按照C++定义的int除以int的结果,测试数据不会出现除数为0的情况),输出结果也为整数(可能为负)。 中间计算结果可能为负。
运行测试
控制台:清理控制台

下面是一个使用栈来计算中缀表达式值的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

typedef struct {
    int capacity;
    int top;
    int* array;
} Stack;

void initializeStack(Stack* stack, int capacity) {
    stack->capacity = capacity;
    stack->top = -1;
    stack->array = (int*)malloc(stack->capacity * sizeof(int));
}

int isEmpty(Stack* stack) {
    return stack->top == -1;
}

int isFull(Stack* stack) {
    return stack->top == stack->capacity - 1;
}

void push(Stack* stack, int element) {
    if (isFull(stack)) {
        printf("Error: Stack is full.\n");
        exit(EXIT_FAILURE);
    }
    stack->array[++stack->top] = element;
}

int pop(Stack* stack) {
    if (isEmpty(stack)) {
        printf("Error: Stack is empty.\n");
        exit(EXIT_FAILURE);
    }
    return stack->array[stack->top--];
}

int peek(Stack* stack) {
    if (isEmpty(stack)) {
        printf("Error: Stack is empty.\n");
        exit(EXIT_FAILURE);
    }
    return stack->array[stack->top];
}

int isOperator(char ch) {
    return ch == '+' || ch == '-' || ch == '*' || ch == '/';
}

int getPrecedence(char operator) {
    if (operator == '+' || operator == '-')
        return 1;
    else if (operator == '*' || operator == '/')
        return 2;
    else
        return 0;
}

int performOperation(int operand1, int operand2, char operator) {
    switch (operator) {
        case '+':
            return operand1 + operand2;
        case '-':
            return operand1 - operand2;
        case '*':
            return operand1 * operand2;
        case '/':
            return operand1 / operand2;
        default:
            return 0;
    }
}

int evaluateExpression(char* expression) {
    Stack operandStack;
    Stack operatorStack;
    initializeStack(&operandStack, strlen(expression));
    initializeStack(&operatorStack, strlen(expression));

    for (int i = 0; expression[i] != '\0'; i++) {
        if (isdigit(expression[i])) {
            int operand = 0;
            while (isdigit(expression[i])) {
                operand = operand * 10 + (expression[i] - '0');
                i++;
            }
            push(&operandStack, operand);
            i--;
        } else if (expression[i] == '(') {
            push(&operatorStack, expression[i]);
        } else if (expression[i] == ')') {
            while (!isEmpty(&operatorStack) && peek(&operatorStack) != '(') {
                int operand2 = pop(&operandStack);
                int operand1 = pop(&operandStack);
                char operator = pop(&operatorStack);
                int result = performOperation(operand1, operand2, operator);
                push(&operandStack, result);
            }
            pop(&operatorStack); // Pop '(' from the operator stack
        } else if (isOperator(expression[i])) {
            while (!isEmpty(&operatorStack) && getPrecedence(expression[i]) <= getPrecedence(peek(&operatorStack))) {
                int operand2 = pop(&operandStack);
                int operand1 = pop(&operandStack);
                char operator = pop(&operatorStack);
                int result = performOperation(operand1, operand2, operator);
                push(&operandStack, result);
            }
            push(&operatorStack, expression[i]);
        }
    }

    while (!isEmpty(&operatorStack)) {
        int operand2 = pop(&operandStack);
        int operand1 = pop(&operandStack);
        char operator = pop(&operatorStack);
        int result = performOperation(operand1, operand2, operator);
        push(&operandStack, result);
    }

    return peek(&operandStack);
}

int main() {
    int N;
    scanf("%d", &N);

    for (int i = 0; i < N; i++) {
        char expression[601];
        scanf("%s", expression);
        int result = evaluateExpression(expression);
        printf("%d\n", result);
    }

    return 0;
}

在这段代码中,我们定义了Stack结构体,用于表示栈。栈包含一个容量、一个指向栈顶的指针以及一个整型数组用于存储栈中的元素。

initializeStack函数用于初始化栈。

isEmpty函数用于检查栈是否为空。

isFull函数用于检查栈是否已满。

push函数用于将元素压入栈中。

pop函数用于从栈中弹出元素。

peek函数用于查看栈顶元素但不弹出。

isOperator函数用于判断字符是否为运算符。

getPrecedence函数用于获取运算符的优先级。

performOperation函数用于执行两个操作数之间的运算。

evaluateExpression函数用于计算中缀表达式的值。函数遍历给定的中缀表达式,根据运算符的优先级和括号的匹配,使用两个栈(operandStackoperatorStack)来计算表达式的值。

main函数中,我们首先读取测试数据的组数N,然后依次读取每组测试数据,调用evaluateExpression函数计算表达式的值,并将结果输出。

这样,我们就可以使用堆栈的方法计算中缀表达式的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/963002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统中u-boot启动流程分析(详解)

大家好&#xff0c;我是ST小智&#xff0c;今天给大家分享一下&#xff0c;u-boot的启动流程。 今天给大家全面的分析一下u-boot启动流程。整理这篇文章花费时间较长&#xff0c;中间很长时间未更新&#xff0c;希望这篇文章对大家有所帮助。 本章主要是详细的分析一下uboot的…

框架分析(8)-React Native

框架分析&#xff08;8&#xff09;-React Native 专栏介绍React Native特性和优势跨平台开发&#xff1a;热更新原生性能组件化开发第三方库支持社区支持 限制和挑战性能问题第三方库兼容性学习曲线 总结 专栏介绍 link 主要对目前市面上常见的框架进行分析和总结&#xff0c…

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system&#xff0c;称之为 文件系统&#xff0c;是 Node.js 中的 内置模块&#xff0c;可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作&#xff1a; 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …

安圭拉变成AI领域的数字金矿?

这个小小的岛国今年的域名销售额可能达到其GDP的10%&#xff01; 安圭拉a小小的英国岛屿领土在加勒比海地区&#xff0c;由于其“可再生能源”&#xff0c;今年可能带来高达3000万美元的收入。ai”域名&#xff0c;报告彭博在周四发表的一篇文章中说。在过去的一年里&#xff0…

应届生面试指南:如何在缺乏经验的情况下脱颖而出

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

IMU姿态计算

总述 IMU即惯性测量单元&#xff0c;主要用于对机体的加速度与角速度的测算&#xff0c;使用场景很多&#xff0c;例如: 平衡车、惯性导航等等 姿态 姿态角&#xff08;Euler angles&#xff09;是用于描述物体在三维空间中的旋转姿态的一种表示方法。它由三个角度组成&…

微机原理 || 第3次测试:第八章-常用接口芯片82558253(测试题+手写解析)

&#xff08;一&#xff09;知识点总结 一直没有学明白8253和8255芯片&#xff0c;觉得后面难&#xff0c;其实看懂后&#xff0c;就是照着表格去对应填写&#xff0c; 知道地址怎么回事就没问题哒~ 相信你&#x1f618; 一、8255芯片&#xff08;不是偷懒&#xff0c;真的就…

PMD代码检查:避免抛出原始的异常类型(AvoidThrowingRawExceptionTypes)

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_design.html#avoidthrowingrawexceptiontypes 避免抛出RuntimeException、Throwable、Exception、Error这样原始的异常类型&#xff0c;而应该抛出它们的子类。 例如下面的使用方法PMD检查报违反项&#xff1a; 在…

动态规划之连续乘积最大子数组 连续和最大子数组

一. 连续和最大子数组 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,…

23062day6

作业&#xff1a;将dict.txt导入到数据库中。 方法1&#xff1a;创建shell脚本&#xff0c; 调用指令创建数据库和表格&#xff0c;使用循环在循环中用数组存储dict.txt的内容并插入表格中。 方法2&#xff1a;在终端创建数据库和表格&#xff0c;将dict.txt中的内容手动输入…

OB Cloud 初体验⎮用户之声

OceanBase 作为国内一款优秀的分布式数据库&#xff0c;这些年来发展很快&#xff0c;在金融、电商、政企、物流等行业得到广泛应用。之前多为私有化部署&#xff0c;去年也推出云版本并于最近进行重大升级。受朋友之约&#xff0c;对其云产品做了个简单测试。因时间所限&#…

Django(10)-项目实战-对发布会管理系统进行测试并获取测试覆盖率

在发布会签到系统中使用django开发了发布会签到系统&#xff0c; 本文对该系统进行测试。 django.test django.test是Django框架中的一个模块&#xff0c;提供了用于编写和运行测试的工具和类。 django.test模块包含了一些用于测试的类和函数&#xff0c;如&#xff1a; Tes…

【算法奥义】最大矩形问题

首先建立一个二维数组&#xff0c;这个二维数组&#xff0c;计算出矩阵的每个元素的左边连续 1 的数量&#xff0c;使用二维数组 left记录&#xff0c;其中left[i][j] 为矩阵第 i 行第 j 列元素的左边连续 1 的数量。 也就是从这个元素开始&#xff0c;从右往左边数有多少个连…

一年一度的苹果秋季发布会7个重要议题需回答,看是否有你关心的

当苹果公司举行产品发布会,比如即将于9月12日举行的苹果活动时,这无疑是该公司向我们介绍其最终展示的产品的来龙去脉的机会。但这也是苹果回答一些紧迫问题的机会,不仅是关于其最新的iPhone、Apple Watch和平板电脑,还有关于其作为一家公司的发展方向。 我们将在9月12日的…

iMazing2024绿色版iOS手机备份软件

乍一看&#xff0c;编辑iPhone或iPad的备份似乎是一个奇怪的命题&#xff0c;但实际上这样做的原因有很多&#xff0c;例如在备份数据损坏时进行修复&#xff0c;又如合并来自不同设备的数据。 iMazing对备份文件编辑的支持非常全面&#xff0c;即使备份是加密的、或是横跨不同…

SVN基本使用笔记——广州云科

简介 SVN是什么? 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复己经删除的文件 SVN跟Git比&#xff0c;有什么优势 使用简单&#xff0c;上手快 目录级权限控制&#xff0c;企业安全必备 子目录Checkout&#xff0c;减少不必要的文件检出…

【UIPickerView案例02-点餐显示数据默认选中 Objective-C语言】

一、这个显示数据 1.它里面,有数据源协议、代理协议、以前,TableView里面,怎么用的, 前面我们是怎么做的, 1)第一步:你是不是设置数据, 设置数据源对象、代理对象、然后呢, 然后呢,咱们Main.storyboard,是不是右键, 把这个数据源对象,拖到控制器上 代理对象,…

Mybatis 动态SQL – 使用if,where标签动态生成条件语句

前面几篇我们介绍了使用Mybatis进行数据的增删改查&#xff0c;并且也了解了如何在Mybatis中使用JDK的日志系统打印日志&#xff1b;本篇我们继续介绍如何使用Mybatis提供的if,where标签动态生成条件语句。 如果您对数据的增删改查和Mybatis集成JDK日志系统不太了解&#xff0…

Mysql锁及行锁机制探索

先讲一下mysql存储方式(innodb) 分为&#xff0c;聚簇索引和非聚簇索引。 聚簇索引&#xff0c;就是b树的所有真实数据。 聚簇索引不是一种索引类型&#xff0c;而是一种数据存储方式。innoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。当表有聚簇索引时&…

PlumeLog查不到日志

一 问题&#xff1a; PlumeLog查不到日志&#xff0c;记录遇到的情况 二 场景 1. 输入不全