上机练习第43天

第一题

个人总结:纯素数可通过递归构建。1维纯素数为2、3、5、7。对每个低维纯素数,在末尾尝试添加1-9(不能加0,因为末位0的数不可能是素数),若新数为素数则得到高维纯素数。递归生成所有8维以内的纯素数并存储,根据输入的维度T直接输出对应结果。

代码如下:

复制代码
#include <stdio.h>
#include <math.h>
#include <string.h>
int isPrime(int num) {
    if (num < 2) return 0;
    if (num == 2) return 1;
    if (num % 2 == 0) return 0;
    
    int limit = (int)sqrt(num);
    for (int i = 3; i <= limit; i += 2) {
        if (num % i == 0) return 0;
    }
    return 1;
}
int results[9][1000];
int counts[9] = {0};
void generatePurePrimes(int current, int digits) {
    results[digits][counts[digits]++] = current;
    if (digits == 8) return;
    for (int digit = 1; digit <= 9; digit++) {
        int nextNum = current * 10 + digit;
        if (isPrime(nextNum)) {
            generatePurePrimes(nextNum, digits + 1);
        }
    }
}

int main() {
    for (int i = 0; i < 9; i++) {
        counts[i] = 0;
    }
    int oneDigitPrimes[] = {2, 3, 5, 7};
    for (int i = 0; i < 4; i++) {
        generatePurePrimes(oneDigitPrimes[i], 1);
    }
    int N;
    scanf("%d", &N);
    for (int caseNum = 0; caseNum < N; caseNum++) {
        int T;
        scanf("%d", &T);
        for (int i = 0; i < counts[T]; i++) {
            printf("%d\n", results[T][i]);
        }
    }
    
    return 0;
}

第二题

个人总结:汉诺塔移动可用递归模拟。将n个盘子从A移到C需2ⁿ-1步。递归函数模拟:先将n-1个盘子从源杆移到辅助杆,再移动最大盘子,最后将n-1个盘子从辅助杆移到目标杆。每移动一步计数,当计数等于m时记录移动方向并返回。若m超出总步数则输出"none"。

代码如下:

复制代码
#include <stdio.h>
int findMove(int n, int m, char from, char to, char aux, int *step, char *src, char *dst) {
    if (n == 1) {
        (*step)++;
        if (*step == m) {
            *src = from;
            *dst = to;
            return 1;
        }
        return 0;
    }
    if (findMove(n - 1, m, from, aux, to, step, src, dst))
        return 1;
    (*step)++;
    if (*step == m) {
        *src = from;
        *dst = to;
        return 1;
    }
    if (findMove(n - 1, m, aux, to, from, step, src, dst))
        return 1;
    
    return 0;
}

int main() {
    int n, m;
    while (scanf("%d %d", &n, &m) == 2) {
        int step = 0;
        char src, dst;
        int totalSteps = (1 << n) - 1;  // 2^n - 1
        if (m < 1 || m > totalSteps) {
            printf("none\n");
            continue;
        }
        if (findMove(n, m, 'A', 'C', 'B', &step, &src, &dst)) {
            printf("%c--%c\n", src, dst);
        } else {
            printf("none\n");
        }
    }
    
    return 0;
}

第三题

个人总结:将数字按自定义规则排序:比较两个数字a和b的拼接结果a+b与b+a,若a+b > b+a则a排在b前面。使用qsort函数实现排序,数字用字符串存储避免溢出。排序后按顺序拼接所有字符串即为能组成的最大整数。

代码如下:

复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_N 50
#define MAX_LEN 100  
char numbers[MAX_N][MAX_LEN];
int compare(const void *a, const void *b) {
    char str1[MAX_LEN * 2], str2[MAX_LEN * 2];
    strcpy(str1, (char*)a);
    strcat(str1, (char*)b);
    strcpy(str2, (char*)b);
    strcat(str2, (char*)a);
    return strcmp(str2, str1);
}

int main() {
    int N;
    while (1) {
        scanf("%d", &N);
        if (N == 0) break;
        for (int i = 0; i < N; i++) {
            scanf("%s", numbers[i]);
        }
        qsort(numbers, N, MAX_LEN, compare);
        for (int i = 0; i < N; i++) {
            printf("%s", numbers[i]);
        }
        printf("\n");
    }
    
    return 0;
}

翻译

支持 Java 的浏览器(如 HotJava¹)允许用户控制 Java 软件对本地系统的访问。当 Java 小应用程序需要权限来访问本地资源(如文件)时,会向用户弹出一个安全对话框,请求用户明确授权。这种"先问许可"的方式确保了用户在系统安全方面始终拥有最终决定权。

  1. Java 是多线程的

与 Ada 类似,而不同于其他语言,Java 为多线程提供了内置的语言支持。多线程允许在单个程序中同时执行多个执行线程。这使得你的程序可以同时完成多项任务:让 Duke 图标跳舞、播放用户喜爱的曲调,并与用户交互,看起来就像在同一时间完成所有操作。

多线程是一项重要优势,因为它允许程序员将程序编写为独立的线程,而不是一堆相互交织的复杂活动。多线程还允许 Java 利用 CPU 空闲时间执行必要的垃圾回收和常规系统维护,使这些功能在执行时对程序性能的影响更小。

单词打卡

相关推荐
zh路西法21 小时前
【宇树机器人强化学习】(一):PPO算法的python实现与解析
python·深度学习·算法·机器学习·机器人
随意起个昵称21 小时前
【贪心】选择尽量多的不相交区间
数据结构·算法
章小幽21 小时前
LeetCode-35.搜索插入位置
数据结构·算法·leetcode
放下华子我只抽RuiKe51 天前
机器学习全景指南-探索篇——发现数据内在结构的聚类算法
人工智能·深度学习·算法·机器学习·语言模型·数据挖掘·聚类
Yupureki1 天前
《C++实战项目-高并发内存池》3.ThreadCache构造
服务器·c语言·c++·算法·哈希算法
j_xxx404_1 天前
C++算法:一维/二维前缀和算法模板题
开发语言·数据结构·c++·算法
x_xbx1 天前
LeetCode:111. 二叉树的最小深度
算法·leetcode·职场和发展
入目星河滚烫1 天前
网易互娱2020校招在线笔试—游戏研发第一批—游泳池-研发
算法·笔试·数据结构与算法
xier_ran1 天前
【第一周】关键词解释:倒数排名融合(Reciprocal Rank Fusion, RRF)算法
开发语言·python·算法
spiritualfood1 天前
蓝桥杯大学b组水质检测
c语言·c++·算法·青少年编程·职场和发展·蓝桥杯