当前位置: 首页 > news >正文

3月18日打卡

代码问题:

双重回文数

作者: xxx

时间限制: 1s

章节: 一维数组

问题描述

如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做回文数。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。 编一个程序,从文件读入两个十进制数 N (1<= N <= 15) S (0 <S <10000) 然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。 本问题的解决方案不需要使用大于4字节的整型变量。

输入说明

只有一行,用空格隔开的两个数N和S。

输出说明

N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。

代码如下:

#include <stdio.h>
#include <stdbool.h>

// 功能1:将数字num转换为base进制,存入数组,返回长度
int toBase(int num, int base, int arr[]) {
int len = 0;
while (num > 0) {
arr[len++] = num % base;
num /= base;
}
return len;
}

// 功能2:判断数组是否是回文
bool isPalin(int arr[], int len) {
for (int i = 0; i < len / 2; i++) {
if (arr[i] != arr[len - 1 - i]) {
return false;
}
}
return true;
}

// 功能3:判断num是否满足 >=2 种进制是回文
bool check(int num) {
int cnt = 0; // 满足条件的进制数
int arr[32]; // 存储转换后的进制位
for (int base = 2; base <= 10; base++) {
int len = toBase(num, base, arr);
if (isPalin(arr, len)) {
cnt++;
if (cnt >= 2) return true; // 满足2种即可
}
}
return false;
}

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

int find = 0; // 已找到的数量
int num = S + 1; // 从S下一个数开始找

while (find < N) {
if (check(num)) {
printf("%d\n", num);
find++;
}
num++;
}
return 0;
}

等差数列

作者: xxx

时间限制: 1s

章节: 一维数组

问题描述

一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...) 在这个问题中a是一个非负的整数,b是正整数。

写一个程序来找出在双平方数集合S中长度为n的等差数列。双平方数集合是所有能表示成p2+q2的数的集合。

输入说明

第一行: N(3<= N<=25),要找的等差数列的长度。 第二行: M(1<= M<=250),搜索双平方数的上界0 <= p,q <= M。

输出说明

如果没有找到数列,输出`NONE'。

如果找到了,输出一行或多行, 每行由两个整数组成:a,b 这些行应该先按b排序再按a排序(均为升序)。

将不会有多于10,000个等差数列。

代码如下:

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

// 存储找到的等差数列 (a, b)
struct Seq {
int a;
int b;
};

// 排序规则:先按 b 升序,再按 a 升序
int cmp(const void *x, const void *y) {
struct Seq *s1 = (struct Seq *)x;
struct Seq *s2 = (struct Seq *)y;
if (s1->b != s2->b) {
return s1->b - s2->b;
}
return s1->a - s2->a;
}

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

// 1. 计算最大可能的双平方数,并创建标记数组
int max_val = M * M + M * M;
bool is_bisquare[125001] = {false}; // M=250 时最大值是 125000

// 生成所有双平方数
for (int p = 0; p <= M; p++) {
for (int q = 0; q <= M; q++) {
int num = p * p + q * q;
is_bisquare[num] = true;
}
}

struct Seq res[10005]; // 存储结果,题目说不超过10000个
int count = 0; // 结果数量

// 2. 枚举查找等差数列
// 枚举起点 a
for (int a = 0; a <= max_val; a++) {
if (!is_bisquare[a]) continue; // a 必须是双平方数

// 枚举公差 b
// 最后一项 a + (N-1)*b 不能超过 max_val
for (int b = 1; a + (N-1)*b <= max_val; b++) {
bool ok = true;
// 检查 N 项是否全部是双平方数
for (int i = 0; i < N; i++) {
int cur = a + i * b;
if (!is_bisquare[cur]) {
ok = false;
break;
}
}
// 找到符合条件的数列
if (ok) {
res[count].a = a;
res[count].b = b;
count++;
}
}
}

// 3. 排序
qsort(res, count, sizeof(struct Seq), cmp);

// 4. 输出
if (count == 0) {
printf("NONE\n");
} else {
for (int i = 0; i < count; i++) {
printf("%d %d\n", res[i].a, res[i].b);
}
}

return 0;
}

人见人爱A-B

作者: xxx

时间限制: 1s

章节: 一维数组

问题描述

A和B是两个集合,A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)呵呵,很简单吧?

输入说明

输入数据包含T个测试实例。

首先输入数字T,然后输入T组测试数据,每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间由一个空格隔开.

输出说明

针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

代码如下:

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

// 排序函数:从小到大
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}

int main() {
int T;
scanf("%d", &T); // 测试用例组数

while (T--) {
int n, m;
scanf("%d%d", &n, &m); // A的大小n,B的大小m

int A[105], B[105]; // 存储集合A、B
int res[105]; // 存储结果 A-B
int len = 0; // 结果数组长度

// 读取集合A
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
// 读取集合B
for (int i = 0; i < m; i++) {
scanf("%d", &B[i]);
}

// 计算 A - B:遍历A中每个元素
for (int i = 0; i < n; i++) {
int inB = 0; // 标记是否在B中

// 判断当前元素是否在B里
for (int j = 0; j < m; j++) {
if (A[i] == B[j]) {
inB = 1;
break;
}
}

// 不在B中,加入结果
if (!inB) {
// 去重:检查是否已经在结果里
int repeat = 0;
for (int k = 0; k < len; k++) {
if (res[k] == A[i]) {
repeat = 1;
break;
}
}
if (!repeat) {
res[len++] = A[i];
}
}
}

// 排序结果
qsort(res, len, sizeof(int), cmp);

// 输出
if (len == 0) {
printf("NULL\n");
} else {
for (int i = 0; i < len; i++) {
printf("%d ", res[i]);
}
printf("\n");
}
}
return 0;
}

英语翻译:

强化学习是一种通过与环境交互来学习最优策略的机器学习方法。在强化学习框架中,智能体观测环境状态并采取相应动作,以此获得奖励或惩罚。智能体的目标是通过持续探索与学习,找到能最大化长期累积奖励的策略。

与监督学习不同,强化学习通常不依赖大量标注数据,而是通过试错来提升决策能力。强化学习已在机器人控制、自动驾驶、游戏人工智能等诸多复杂任务中取得成功。在著名的围棋程序 AlphaGo 中,强化学习与深度神经网络相结合,使计算机达到甚至超越了人类顶尖棋手的水平。然而在实际应用中,强化学习仍面临样本效率低、训练成本高等挑战。

http://www.jsqmd.com/news/500115/

相关文章:

  • 告别AI Agent学习焦虑!6个GitHub项目带你从入门到精通,附可执行路线图
  • RPC核心原理:组件与调用流程
  • 2025年10款降AI率工具深度测评:论文降ai率,谁是真能手?
  • 智破纸质壁垒 赋能医药合规——旗讯数字医药注册批件纸质文档智能识别与结构化提取对接解决方案
  • 2026年本科毕业论文查AI率用什么工具预检?这3个又快又准
  • 消息中间件RabbitMQ04:路由模式+死信队列的应用实践模板
  • SQL 注入防不胜防?金仓 V009R002C014 内置防火墙,主动防御更省心
  • SEO_详解SEO关键词研究的完整步骤与工具推荐
  • 金仓数据库 SQL 防火墙实战:内核层防注入,配置 / 调优 / 审计全代码解析
  • 10款降AIGC平台真实测评:见证免费降AI天花板(附98%降至6%案例对比)
  • 超详细 OpenClaw 全平台部署教程
  • 深刻理解继承和多态
  • 2026阿里云SSL证书价格全解析:免费版与付费版对比及申请指南
  • 设计模式大揭秘:打造高级AI应用的核心套路与实战技巧
  • python爬虫学习第二课-流程控制
  • 第4篇:中文语言 华夏本源语言——极简语法大全
  • SpringBoot 参数校验报错全集|@Valid/@Validated 高频踩坑全解决
  • 从学习到拦截:KingbaseES SQL 防火墙三种模式深度测评
  • 【ARM汇编】0x01_ARM和C混合编程实现基本运算
  • 【影刀RPA】【B站】之【视频】【自动】【获取信息、关注、点赞、智能评论、智能回复】
  • MCP的基本概念
  • esp8266 nodemcu v3烧录失败A fatal esptool.py error occurred: Cannot configure port, something went wrong
  • Claude Code 使用与配置完整指南
  • 2026上海户外广告位哪家好?核心商圈资源深度解析 - 品牌排行榜
  • Fitbit健康教练将集成医疗记录数据提供个性化指导
  • 应对芯片涨价,光口以太网芯片国产P2P替代
  • 做乡村改造没设计师?这个建筑AI工具ADAI能救命
  • 飞渡科技2026空间智能新品发布,引领全栈信创新时代
  • OpenShell:安全沙箱隔离的沙箱隔离技术
  • 上海地标广告位公司哪家专业?2026年行业实力机构推荐 - 品牌排行榜