上机练习第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 空闲时间执行必要的垃圾回收和常规系统维护,使这些功能在执行时对程序性能的影响更小。

单词打卡

相关推荐
淡海水20 分钟前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic10138 分钟前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
INGNIGHT4 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080544 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山4 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
暮雨封夕5 小时前
跳表(Skip List)详解:原理、实现、使用场景与实际应用
数据结构
mikuyyds5 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a187927218315 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
miller-tsunami5 小时前
排序的相关知识点
数据结构·排序算法
syagain_zsx5 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举