- 博客(83)
- 收藏
- 关注
原创 查询万年历
*** 该年 1月1号 到2000年1月1号的 " 星期差 " ***//*** month 在此存放该月天数 ***//*** 该年是否润 ***/while (date[i])/*遍历传入的参数日期,计算出year,month,day*//*2月引起的星期差为1个*//*年引起的星期差为0个*/if (month < 1 || month>12)/*若月份传入错误数字*/if (day > 0) /*** 判定查看类型 ***//*** 该月以前的月所引起的 " 星期差 " ***/
2025-06-08 14:40:09
477
原创 访问temp文件
*若文件未打开输出提示信息*/printf("\nCurrent path is:%s\n", pathname);/*将临时文件夹路径输出*/strcpy(filename, pathname);/*将完整的文件路径名复制到 filename 中*/printf("\n%s", filename);/*输出文件路径名*/pathname = getenv("TEMP");/*获取临时文件夹路径*/strcat(pathname, "\\new.txt");{ /*读取文件中的内容*/
2025-06-08 00:06:29
322
原创 十大排序法3
j -= gap) // 升序,降序改 <exp *= 10) { // 按位(个位、十位...)i++) count[i] += count[i-1];gap /= 2) { // 增量序列(常用n/2递减)i++) arr[i] = output[i];void countSort(int arr[], int n, int max) { // max为数组最大值。i--) { // 稳定排序(从后往前)int getMax(int arr[], int n) { // 获取最大值位数。
2025-06-06 21:41:07
478
原创 十大排序法2
/ 大顶堆,小顶堆改 <arr[k++] = (L[i] <= R[j])?// 升序,降序改 >=arr[0] = arr[i];if (arr[j] <= pivot) { // 升序,降序改 >=// 调整剩余元素为堆。while (i < n1 && j < n2) // 合并有序数组。// 构建大顶堆(从最后一个非叶子节点开始)// 分区函数(取最后一个元素为基准)
2025-06-06 21:39:28
461
原创 十大排序法1
while (j >= 0 && arr[j] > key) { // 升序,降序改 <if (arr[j] > arr[j+1]) { // 升序排列,降序改 <key = arr[i];原理:将元素插入已排序部分的合适位置。原理:每次选最小(或最大)元素放到前端。原理:相邻元素比较,大的往后“冒泡”。
2025-06-06 21:38:02
418
原创 修正重复数
给定一个长度为 N 的数组 A = [A₁, A₂, …, Aₙ],数组中可能有重复出现的整数。当修改 Aᵢ时,小明会检查 Aᵢ是否在 A₁~Aᵢ₋₁ 中出现过。如果新的 Aᵢ仍在之前出现过,小明会持续给 Aᵢ加 1,直到 Aᵢ没有在 A₁~Aᵢ₋₁ 中出现过。当 Aₙ也经过上述修改之后,显然 A 数组中就没有重复的整数。int find_set(int x){ //用“路径压缩”优化的。
2025-06-05 22:06:23
369
原创 抢修受损公路
/ 每个村庄的初始父节点是自己。// 所有村庄连通,输出当前时间。// 存在不连通的村庄。// 输入每条公路的信息。// 所有公路修复后仍不连通。// 检查所有村庄是否连通。// 查找(带路径压缩)// 输入村庄数和公路数。// 按修复时间排序(升序)// 按修复时间排序。
2025-06-05 21:39:39
594
原创 并查集简介
if (rank[rootX] == rank[rootY]) { // 若秩相等,合并后秩+1。// 秩数组,rank[x] 表示以 x 为根的树的秩(高度或大小)parent[x] = find(parent[x]);// 父节点数组,parent[x] 表示 x 的父节点。
2025-06-05 21:14:01
495
原创 查找位置信息
strstr 函数使用:strstr(str3, str4) 函数在 str3 中查找 str4 子串,如果找到则返回子串起始位置指针,否则返回 NULL ,根据返回结果输出相应提示信息。从键盘中输入str1和str2,查找str1字符串中第一个不属于str2字符串中字符的位置,并将该位置输出;strspn 函数使用:strspn(str1, str2) 函数计算 str1 中连续包含 str2 中字符的最大长度,结果存入 pos 并输出。/*从键盘中输入字符串3*/
2025-06-04 21:58:04
521
原创 完全m叉树
如果T的每个分,点的出度都恰好等于m,则称T为完全m叉树。//满的,累加这一层的所有孩子。//从k点开始,分析它的最左和最右孩子。//这一层的最左孩子。while(1) { //从第k点开始一层一层往下计算直到最后一层。//这一层的最右孩子。//初值为1,即k点自己。if(rs >= n){ //孩子不满。
2025-06-04 21:52:25
329
原创 区间数组判断
给定一个 1~n 的排列,每个 <i,j> 对的价值是 j - i + 1,计算所有满足以下条件的 <i,j> 对的总价值。(2)a[i]~a[j] 的数字均小于 min(a[i],a[j]);分析这个题目基于排列数组特性与区间条件判断,核心是高效找出满足特定“凹区间”条件的所有 <i,j> 对,并计算其价值总和。用单调栈结构:使用单调栈来维护当前的索引,确保栈中的元素对应的数组值是单调递增的。// 维护单调递增栈。// 计算满足条件的区间总价值。// 定义单调栈结构。// 检查栈是否为空。
2025-06-04 20:33:57
467
原创 表达式括号匹配
表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。请设计检查表达式左右括号是否匹配。使用顺序栈存储左括号,包含初始化、入栈、出栈等基本操作。// 最终检查栈是否为空(所有左括号都被匹配)printf("括号不匹配\n");printf("括号匹配\n");printf("请输入表达式:");// 处理左括号,入栈。// 判断括号是否匹配。// 判断栈是否已满。// 判断栈是否为空。
2025-06-04 08:10:27
575
原创 最大公约数
例如,计算 gcd(12, 18) ,过程为 gcd(18, 12 % 18) 即 gcd(18, 12) ,接着 gcd(12, 18 % 12) 即 gcd(12, 6) ,然后 gcd(6, 12 % 6) 即 gcd(6, 0) ,此时返回 6 ,就是 12 和 18 的最大公约数。// 计算最小公倍数,利用公式:lcm(a, b) = a * b / gcd(a, b)// 计算最大公约数的函数,欧几里得算法(递归实现)// 计算最小公倍数的函数。
2025-06-03 22:12:40
431
原创 小猫咪分鱼
A、B、C、D、E5只小猫在某天夜里合伙去捕鱼,到凌晨时都疲惫不堪,于是各自找地方睡觉。第二天,A第一个醒来,他将鱼分成5份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条扔掉,拿走自己的一份。C、D、E依次醒来,也按同样的方法拿鱼。printf("他们合伙至少捕了 %d 条鱼\n", result);// 每次增加 5 的幂次(根据问题数学特性),加快查找速度。// 如果 5 个都能按规则分鱼,找到结果。// 计算剩下的鱼的数量。// 倒推计算最初的鱼的数量。
2025-06-03 22:02:37
564
原创 分发扑克牌
每次分配时,遍历所有可能的牌数字,只要该数字的牌剩余数量大于0,就将其加入当前人的手牌中,直到当前人手中有 k 张牌。有n张牌,每张牌上有一个数字a[i],现在需要将这n张牌尽可能地分给更多的人。每个人需要被分到k张牌,并且每个人被分到手的牌中不能有相同数字,同时需要保证可以尽可能地分给更多的人。1. 输入处理:读取牌的总数 n 、每人应得牌数 k ,以及每张牌上的数字序列 a[i]。2. 统计牌数:利用数组 cardCount 作为哈希表,统计每个数字的牌的剩余数量。// 初始化一个人的手牌。
2025-06-03 21:35:30
426
原创 神奇的丑数
对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S。如质因子2、3和5的数,6、8都是丑数,前20个丑数为:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36。// 标记已经计算过的丑数。2. 计算丑数:从初始丑数 1 开始,每次取出当前最小丑数,然后乘以素数集合中的每个素数得到新的丑数,将新的未访问过的丑数加入优先队列。// 初始化优先队列。
2025-06-03 20:31:31
422
原创 年龄是多少
有5个人坐在一起,问第五个人多少岁?他说比第四个人大两岁。问第四个人岁数,他说比第三个人大两岁。问第三个人,又说比第二个人大两岁。问第二个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问他们几个人的对应年龄是多少。// 第n个人年龄比第n - 1个人大2岁。printf("第 %d 个人的年龄是 %d 岁\n", num, result);递归就是在调用一个函数的过程中又出现直接或间接地调用该函数本身。return 10;// 第一个人年龄为10岁。printf("请输入是第几个人: ");
2025-06-02 20:08:29
441
原创 字符串加解密
printf("输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n");printf("加密后的密文是:%s\n",cryptograph);i++) /遍历密文字符串 /printf("请输入要加密的明文:\n");else if(result == 2) /如果是解密字符串 /else if(result == 3) /选择3退出系统 //获取输入的明文 /printf("解密后的明文是:%s\n",Text);if (result == 1) /如果是加密明文 /
2025-06-02 19:53:15
561
原创 回文字符串
int palind(char str[],int k, int i) /自定义函数检测是否为回文字符串 //当n为0说明不是回文数,否则是回文数 /else if(str[k]==str[i-k]) /判断相对应的两个字符是否相等 /n=palind(str,(i/2-1),i-1);/当字符串中字符个数为奇数时 /if(str[k]==str[i-k]&&k==0) /递归结束条件 /int i=0,n=0;if(i%2==0) /当字符串中字符个数为偶数时 /palind(str,k-1,i);
2025-06-02 19:47:39
426
原创 统计字符数
定义letters、space、digit、others 4个变量为基本整型 /printf("char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);/当输入的是空格时变量space加1//当输入的是数字时变量digit加1//当输入的既不是英文字母又不是空格或数字时变量others加1//定义c为字符型 /
2025-06-02 19:42:07
417
原创 猜数字游戏
随机分配数据与核对输入数据,利用系统时钟作为随机数的种子,将每次产生的0~9之间(包含0和9)的随机数存到数组a中,将从键盘中输入的数字存到数组b中,用数组b中的所有数与数组a中的每个数比较,通过统计位置与数据均相同的个数及统计位置不同但数据相同的个数来输出提示信息。= j) /*检测输入的数据与计算机分配的数据相同但位置不同的个数*/if (a[i] == b[i])/*检测输入的数据与计算机分配的数据相同且位置相同的个数*/if (a[i] == a[j]) /*判断数组 a 中是否有相同数字*/
2025-06-01 13:58:29
371
原创 灯塔灯的数量
设最上层灯数为a,从最上层开始,依次计算每层灯数并累加,直到计算到第八层。// 最下层灯数是最上层灯数的128倍。if (currentSum == total) { // 找到符合条件的最上层灯数。有一八层灯塔,每层的灯数都是前一层的2倍,共有765盏灯,请问最上层与最下层的灯数是多少。j++) { // 计算八层灯数总和。printf("最高层灯数为:%d\n", bottom);for (i = 1;i++) { // 从1开始尝试最上层灯数。printf("第一层灯数为:%d\n", i);
2025-06-01 09:47:27
286
原创 小猴子的年龄
确定年龄的范围,因为17的四次方是83521,小于六位,22的三次方是10648,大于四位,所以年龄的范围就确定出来了,即大于等于18小于等于21。其次是对18~21之间的数进行穷举时,应将算出的四位数和六位数的每位数字分别存于数组中,再对这10个数字进行判断,看有无重复或是否有数字未出现。动物园里来了一位新猴子,很喜欢学数学,伙伴们问他年龄的时候,他向大家说:“我的年龄的平方是个三位数,立方是个四位数,四次方是个六位数。
2025-06-01 09:28:56
401
原创 集邮爱好者
集邮爱好者把所有邮票存放在3个集邮册中,在A册内存放全部的2/10,在B册内存放不知道是全部的七分之几,在C册内存放303张邮票,请问这位集邮爱好者集邮总数是多少?A册内存放全部的2/10,B册内存放全部的x/7,C册内存放303张邮票,则可列出sum=2*sum/10+x*sum/7+303,经化简可得sum=10605/(28-5*x)。if (10605 % (28 - 5 * x) == 0) /满足条件的 x 值即为所求 //输出 B 集邮册中的邮票数 //输出 C 集邮册中的邮票数 /
2025-06-01 09:03:34
600
原创 杨辉三角系数
杨辉三角是由排列成三角形的数码,在我国古代大多用来作为开方的工具。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。杨辉三角可看作一张二项式系数表。若将顶层称为第0层,则杨辉三角的第n层正好对应二项式 (a+b)n 展开的系数。
2025-05-31 21:31:24
322
原创 神奇的平方和运算
任意给出一个自然数k,数k不为0,计算其各位数字的平方和k1,再计算k1的各位数字的平方和k2……,重复此过程,最终将得到数1或145,此时再做数的平方和运算,最终结果将始终是1或145。/将n的各位数字存放到数组a中 /while (i >= 1) /使用while语句将运算过程输出 /;printf("=%ld\n", n)/输出最终求得的平方和n/;/定义数组及变量为基本整型 /;scanf("%ld", &n)/从键盘中输入一个数n/if (n == 0) /如果输入的数为0则重新输入 /
2025-05-31 20:28:54
698
原创 神奇的回文素数
首先应该判断是否为素数,然后判断该素数是两位数还是三位数,若是两位数,需判断个位与十位的数字是否相同,若是三位数则需判断个位上和百位上的数字是否相同。if (i / 100 == i % 10) /*判断百位和个位是否相同*/if (i / 10 == i % 10) /*判断十位和个位是否相同*/if (i / 100 == 0) /*判断是否是两位数*/if (ss(i) == 1) /*判断是否是素数*/if (i <= 1) /*小于等于1的数不是素数*/if (i == 2) /*2是素数*/
2025-05-31 19:02:54
330
原创 跳动的爱心
/ 心形数学公式:(x² + y² - 1)³ - x²y³ ≤ 0(调整参数模拟跳动)system("cls");// 清屏(Linux/macOS 需改为 "clear")// 绘制心形(尺寸15,幅度beat)#include <windows.h> // Windows 系统头文件(用于延时和清屏)beat = (beat == 1)?跳动的心形图案,通过字符打印和延时效果模拟跳动,心形在两种大小间交替跳动。// 跳动幅度(1-2)// 延时100ms。
2025-05-30 19:30:25
3296
1
原创 优先队列用法
第 5 行定义了一个队首是最大值的优先队列,第 10 行的输出如下: 27 - wuhan 21 - shanghai 11 - beijing 第 13 行定义了一个队首是最小值的优先队列,第 19 行的输出如下: 11 - beijing 21 - shanghai 27 - wuhan #include <bits/stdc++.h> using namespace std; int main() { priority_queue<pair<int, string>> pq; /
2025-05-30 19:20:39
478
原创 小猴子用电脑翻译
对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和释义放入内存,以备后续的查找和翻译。在软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过 M - 1,软件会将新单词存入一个未使用的内存单元;若内存中已存入 M 个单词,软件会清空最早进入内存的单词,腾出单元来存放新单词。假设在翻译开始前内存中没有任何单词。//内存中没有这个单词,到外存中找,答案加 1。
2025-05-30 08:10:07
232
原创 约瑟夫问题
有n 个人,编号为 1~n,按顺序围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,以此类推,直到所有的人都出圈,请依次输出出圈人的编号。方法是反复排队,从队头出去,然后重新排到队尾,每一轮数到 m 的人离开队列。
2025-05-29 19:54:39
359
原创 整数加减法测试题
1) && (a + b == c))/判断运算结果是否等于正确答案 /rand()函数,其作用是产生一个随机数并返回这个数,a=rand()%max;while ((a < b) && (sign == 1)) /选择减法操作时,如果a小于b则重新产生随机数 /printf("请选择运算符(1 or other,1:-,other:+): \n");
2025-05-29 16:50:32
594
原创 神奇的四位数
abcd是一个四位整数,将它分成两段,即ab和cd,使之相加求和后再平方。i < 10000;i++) /对 1000~10000 之间的数进行穷举 /采用“/”和“%”的方法,“/”求的是该四位数的前两位,“%”求的是该四位数的后两位。if ((a + b)*(a + b) == i) /判断是否满足条件 /int i, a, b;/定义变量为基本整型 /a = i / 100;/求出该数的前两位数 /b = i % 100;/求出该数的后两位数 /
2025-05-29 16:35:57
457
原创 删除并重新排队
给定按从小到大的顺序排列的数字 1 到 n,随后对它们进行 m 次操作,每次将一个数字 x 移动到数字 y 之前或之后。当 z = 1 时,将 x 移动到 y 之前。//上一句可以把 list<int>::iterator it 改为 auto it。
2025-05-29 12:35:48
396
原创 删除队列中整数
v[p.second]) { //这个队头被del()改过了,不一定最小。//读优先队列的队头,队头是最小值.p.first是值,p.second是它的位置。//队尾n+1,左指针L[N+1]指向节点n。3)优先队列找到最小值后,用优先队列找最小值t,t对应的链表节R[t]。//队头0,右指针R[0]指向节点1。
2025-05-28 22:45:18
514
原创 小猴子摆玩具
小猴子有一天迷上了排队的游戏,他手上有标号为 1~10 的 10 个玩具,现在小猴子将它们排成一列,可小猴子不确定到底想把哪个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。小技巧:toy[0]始终是链表的头,但是不用它存数据,真正的数据在它的后面。//toy[0]始终是链表头,并且不用来存编号。= -1){ //遍历链表,查找x的前一个节点p。把1~10这10个数据存到10个节点toy[1]~toy[10]//p是x的前一个节点。
2025-05-28 21:44:59
609
原创 阿姆斯特朗数
阿姆斯特朗数也就是俗称的水仙花数,是指一个n位数,其各位数字的n次方之和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33。请问100-10000所有水仙花数有哪些。// 计算num的位数。采用穷举法对范围之间的数字进行拆分,再按照阿姆斯特朗数(水仙花数)的性质计算并判断。printf("%d是阿姆斯特朗数\n", num);// 判断一个数是否为阿姆斯特朗数。
2025-05-27 23:18:46
460
原创 真话与假话
有A、B、C、D、E五个人,每人额头上都贴了一张黑色或白色的纸条。五人对坐,每人都可以看到其他人额头上的纸的颜色,但都不知道自己额头上的纸的颜色。现在已知额头贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话,问这五个人谁的额头上贴的是白纸,谁的额头上贴的是黑纸。a++) /对 a、b、c、d、e 穷举贴黑纸和白纸的所有可能 /C说:“我看见有一个人额头上贴的是白纸,其他三人额头上贴的是黑纸。A说:“我看见有三个人额头上贴的是白纸,一个人额头上贴的是黑纸。D说:“我看见四人额头上贴的都是白纸”。
2025-05-27 22:57:08
574
原创 神奇的可逆素数
可逆素数是指将一个素数的各位数字顺序地倒过来构成的反序数仍然是素数,请问按以上叙述所有的四位素数有哪些。j++) /对大于2的数进行判断 /int ss(int i) /自定义函数判断是否为素数 /- 10 * n2 + n1 > i) /根据条件判断 /n3 = (i % 100) / 10;if (n % 10 == 0) /10个数一换行 /if (i <= 1) /小于1的数不是素数 /n1 = i / 1000;if (i == 2) /2是素数 /
2025-05-27 12:54:03
414
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅