C语言
编程代码
yitahutu79
小李今天打代码了吗?
展开
-
字符反转,
【代码】字符反转,原创 2022-11-30 22:05:20 · 234 阅读 · 0 评论 -
并查集练习题1:朋友圈
题目描述 所谓一个朋友圈子,不一定其中的人都互相直接认识。 例如:小张的朋友是小李,小李的朋友是小王,那么他们三个人属于一个朋友圈。 现在给出一些人的朋友关系,人按照从 1 到 n 编号在这中间会进行询问某两个人是否属于一个朋友圈,请你编写程序,实现这个过程。输入第一行输入两个整数 n,m(1≤n≤10000,3≤m≤100000),分别代表人数和操作数。接下来 m 行,每行三个整 a,b,c(a∈[1,2], 1≤b,c≤n)当 a=1 时,代表新增一条已知信息,b,c 是朋友当 a=2 时原创 2022-06-21 18:24:12 · 195 阅读 · 0 评论 -
双向链表遍历
代码原创 2022-06-12 23:45:36 · 409 阅读 · 0 评论 -
查找算法哈希表
代码原创 2022-06-12 21:57:46 · 94 阅读 · 0 评论 -
653. 两数之和 IV - 输入 BST
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例 1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true示例 2:输入: root = [5,3,6,2,4,null,7], k = 28输出: false提示:二叉树的节点个数的范围是 [1, 104].-104 <= Node.val <= 104root 为二叉搜索树-105 <= k &原创 2022-04-23 00:27:15 · 1058 阅读 · 0 评论 -
501. 二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。假定 BST 满足如下定义:结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树示例 1:输入:root = [1,null,2,2]输出:[2]示例 2:输入:root = [0]输出:[0]提示:树中节点的数目在范围 [1, 104] 内原创 2022-04-23 00:11:16 · 151 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树原创 2022-04-22 23:39:20 · 425 阅读 · 0 评论 -
112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。示例 2:输入:roo原创 2022-04-22 23:44:54 · 185 阅读 · 0 评论 -
AVL树(LL LR RL RR)插入删除
Windows版本//VS2022#include <stdio.h>#include <stdlib.h>#define max(a,b) ((a) > (b) ? (a) : (b))typedef struct Node { int data, h; struct Node* lchild, * rchild;}Node;Node __NIL;#define NIL (&__NIL)#define DEBUG#ifdef DEBUG原创 2022-04-22 23:14:16 · 155 阅读 · 0 评论 -
不稳定排序(选择,快速)
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define TEST(arr, n, func, ...) {\int *num = (int *) malloc (sizeof(int) * n);\memcpy(num, arr, sizeof(int) * n);\output(num,n);\printf("%s = ", #func原创 2022-04-22 19:29:05 · 311 阅读 · 0 评论 -
arg...(linux)在Windows中的使用
linux:#define TEST(arr, n, func, args...) {\int *num = (int *) malloc (sizeof(int) * n);\memcpy(num, arr, sizeof(int) * n);\printf("%s = ", #func);\func(args);\output(num,n);\free(num);\printf("\n");\}windows: 1.将args...替换成..., 2.调用函数时将args替换成__原创 2022-04-22 19:00:20 · 459 阅读 · 0 评论 -
稳定排序算法(插入,冒泡,归并)
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define TEST(arr, n, func, ...) {\int *num = (int *) malloc (sizeof(int) * n);\memcpy(num, arr, sizeof(int) * n);\printf("%s = ", #func);\func(__VA_AR原创 2022-04-22 18:56:33 · 120 阅读 · 0 评论 -
99. 恢复二叉搜索树
给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。示例 1:输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。示例 2:输入:root = [3,1,4,null,null,2]输出:[2,1,4,null,null,3]解释:2 不能在 3 的右子树中,因为 2 < 3 。交换原创 2022-04-14 00:10:57 · 120 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。示例 1:输入:root = [5,3,6,2,4,null,7], key = 3输出:[5,4,6,2,null,null,7]解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。一个正确的答案是 [5,4,6,2,原创 2022-04-14 00:11:11 · 142 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4限制:1 ≤ k ≤ 二叉搜索树元素个数/** * Definition for原创 2022-04-14 00:11:22 · 111 阅读 · 0 评论 -
669. 修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。示例 1:输入:root = [1,0,2], low = 1, high = 2输出:[1,null,2]示例 2:输入:r原创 2022-04-14 00:11:32 · 145 阅读 · 0 评论 -
110.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 1原创 2022-04-13 22:36:11 · 465 阅读 · 0 评论 -
二叉查找树
#include <stdio.h>#include <stdlib.h>#define KEY(n) (n? n->data:0)#define CNT(n) (n? n->cnt:0)#define TEST(func){\ while (~scanf_s("%d", &val)) {\ if (val == -1) break;\ root = func(root, val);\ printf("\n=== %s %d to BS原创 2022-04-13 22:04:43 · 158 阅读 · 0 评论 -
顺序表..
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Vector { int* data; int size, length;} Vec;Vec* init(int n) { Vec* v = (Vec*)malloc(sizeof(Vec)); v->data = (int *)malloc(sizeof(int) * n); v->length =原创 2022-04-11 01:52:48 · 102 阅读 · 0 评论 -
翻转链表.
#include <stdio.h>#include <stdlib.h>#include <time.h>#define COLOR(a,b) "\033[" #b "m" a "\033[0m"#define GREEN(a) COLOR(a,32)typedef struct Node { int data; struct Node* next;} Node;typedef struct List { Node head;//定义虚拟头节点原创 2022-04-11 01:27:39 · 412 阅读 · 0 评论 -
l链表...
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node { int data; struct Node* next;} Node;typedef struct List { Node head;//定义虚拟头节点 int length;}List;Node* getNewNode(int);List* init_list();int insert(L原创 2022-04-11 01:18:29 · 81 阅读 · 0 评论 -
链栈...
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node { int data; struct Node* next;}Node;typedef struct Stack { Node* top; int length;}Stack;Node* getNewNode(int);Stack* init_stack();void clear(Stack*)原创 2022-04-10 23:56:34 · 98 阅读 · 0 评论 -
广义表转二叉树
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct Node { int data; struct Node* lchild, * rchild;}Node;typedef struct Tree { Node* root; int length;}Tree;//栈的结构定义(存储二叉树节点地址)typedef struct Stack { Node*原创 2022-04-08 14:48:20 · 854 阅读 · 0 评论 -
二叉排序树
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node { int data; struct Node* lchild, * rchild;} Node;typedef struct Tree { Node* root; int length;}Tree;Node* getNewNode(int val) { Node* p = (Node*)mall原创 2022-04-08 02:24:06 · 84 阅读 · 0 评论 -
链队列..
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node { int data; struct Node* next;}Node;typedef struct Queue { Node head, *tail; int length;}Queue;Node* getNewNode(int val) { Node* p = (Node*)malloc(si原创 2022-04-08 00:13:35 · 106 阅读 · 0 评论 -
栈....
#include <stdio.h>#include <stdlib.h>#include <time.h>#define COLOR(a,b) "\033[" #b "m" a "\033[0m"#define RED(a) COLOR(a,31)#define GREEN(a) COLOR(a,32)typedef struct Stack { int* data; int size, top;}Stack;Stack* init(int n)原创 2022-04-07 22:25:46 · 104 阅读 · 0 评论 -
队列...
#include <stdio.h>#include <stdlib.h>#include <time.h>#define COLOR(a,b) "\033[" #b "m" a "\033[0m"#define RED(a) COLOR(a,34)#define GREEN(a) COLOR(a,32)#define null NULLtypedef struct Queue { int* data; int head, tail, length;原创 2022-04-07 17:21:02 · 82 阅读 · 0 评论 -
字符串操作
题目描述从键盘输入任意的一个字符串A ,其长度L 不小于6 ,同时再输入一个整数N (其中:N<L)作为插入点,以及任意的一个字符串B ,其长度为L1 (其中:L1<L ),现要求完成下列功能:如果字符串A 的长度L 大于100 输出 100 ,否则输出L ;在N 点处,插入字符串B 后,将得到一个新字符串C ,请计算并输出最后的字符串;查找字符串C 中,从右到左第一个出现字母 x 的位置。输入输入包括三行:第一行:长度为L 的字符串A(5≤L≤10000) ;第二行:一个整数N原创 2022-03-07 00:25:49 · 337 阅读 · 0 评论 -
汉诺塔问题
题目描述汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着 64 片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。现在路飞开始玩汉诺塔游戏, 他放了 n 片黄金圆盘在第一根柱子上,从上到下依次编号为 1 到 n ,1 号圆盘最小,n 号圆盘最大。路飞移动第i 号圆盘的时候需要花费 i 点体力。现在路飞想把圆盘全部移动到第原创 2022-01-08 00:24:25 · 341 阅读 · 0 评论 -
弹簧板问题
题目描述有一个小球掉落在一串连续的弹簧板上,小球落到某一个弹簧板后,会被弹到某一个地点,直到小球被弹到弹簧板以外的地方。假设有 n 个连续的弹簧板,每个弹簧板占一个单位距离,a[i] 代表代表第 i 个弹簧板会把小球向前弹 a[i] 个距离。比如位置 1 的弹簧能让小球前进 2 个距离到达位置 3 。如果小球落到某个弹簧板后,经过一系列弹跳会被弹出弹簧板,那么小球就能从这个弹簧板弹出来。现在小球掉到了1 号弹簧板上面,那么这个小球会被弹起多少次,才会弹出弹簧板。 1号弹簧板也算一次。输入第一个行输原创 2022-01-07 23:37:06 · 361 阅读 · 0 评论 -
路飞吃桃问题
题目描述路飞买了一堆桃子不知道个数,第一天吃了一半的桃子,还不过瘾,又多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到 n 天只剩下一个桃子了。路飞想知道一开始买了多少桃子。输入输入一个整数 n(2≤n≤30)。输出输出买的桃子的数量。样例输入12样例输出14样例输入23样例输出210#include <stdio.h> int main() { int n; int m = 1; scanf("%d", &n); for (int i原创 2022-01-07 23:16:31 · 466 阅读 · 0 评论 -
大小写翻转
题目描述现在有一个字符串,你需要把字符串中出现的小写字母转换成大写字母,大写字母转换成小写字母。输入输入一个字符串。输出输出转换以后的字符串。样例输入1cSACyCFhEImg样例输出1CsacYcfHeiMG#include <stdio.h>#include <string.h>char f(char *a) { for ( int i = 0; i < strlen(a); i++) { if (a[i] >= 'a' &原创 2022-01-07 22:02:30 · 256 阅读 · 0 评论 -
c语言实现幂级数
题目描述请你实现一个函数 pow,该函数传入一个整数n ,返回2n 的值。输入输入一个整数n(0≤n≤63) 。输出输出2n 的值。样例输入14样例输出116#include <stdio.h>long long pow(int n) { long long result = 1; for (int i = 0; i < n; i++) { result *= 2; } return result;}int main() { int n;原创 2022-01-07 20:59:32 · 778 阅读 · 0 评论 -
二分法求方程近似解
题目描述 二分法是一种求解方程近似根的方法。对于一个函数 f(x),使用二分法求 f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间[−20,20]),区间两端自变量 x 的值对应的 f(x) 值是异号的,之后我们会计算出两端 x 的中点位置 x′ 所对应的 f(x′),然后更新我们的迭代区间,确保对应的迭代区间的两端 x 的值对应的f(x) 值还会是异号的。 重复这个过程直到我们某一次中点值 x′ 对应的 f(x′)<ϵ(题目中可以直接用 EPS原创 2022-01-07 20:46:28 · 3923 阅读 · 0 评论 -
输出字母图形
题目描述由键盘输入任意的一个由大写字母组成的字符串(不需检验是否为大写字母),要求以字符串的长度 l 作为图形的行数,并将输入的这个字符串作为图形的第一行进行打印输出。从第二行开始,图形的特点是:将第一行的最后两个字符整体移到最前就是第二行,再把第二行的最后两个字符整体移到最前就是第三行,依次进行,完成 l 行字母的输出。输入输入只有一个由大写字母组成的字符串,字符串的长度为 l(其中 3≤l≤26)。输出输出为符合题目要求的图形.样例输入1ABCDE样例输出1ABCDEDEABC原创 2022-01-07 20:16:10 · 1217 阅读 · 0 评论 -
成绩优良中差统计
题目描述 六年级一班举办数学小竞赛。考试结束后,班主任老师让张红同学用计算机编程的方法,来统计一下班里 N 名同学在这次数学竞赛中,成绩在以下各类别的人数。 要求:分数为整数,用变量 F 表示,以百分制作为记分标准。成绩在(90≤F≤100 )分数之间,用“You”来标识;成绩在(80≤F≤89 )分数之间,用“Liang”来标识;成绩在( 60≤F≤79 )分数之间,用“Zhong”来标识;成绩在60分以下,则用“Cha”来标识。 按高分到低分的顺序来统计,每一行输出数据都从第一列开始。输入原创 2022-01-07 20:08:29 · 624 阅读 · 0 评论 -
批量替换字符串
题目描述在网络编程中,如果 URL 中含有特殊字符,如空格、 “#” 等,服务器将无法识别导致无法获得正确的参数值,我们需要将这些特殊字符转换成服务器可以识别的字符,例如将空格转换成 “%20” 。 给定一个字符串,将其中的空格转换成 “%20” 。 输入一个原始字符串,例如 “hello world” 。 输出转换后的字符串,例如 “hello%20world” 。输入输入一个字符串,长度在106之内。输出输出转换完成的字符串。样例输入1we are happy样例输出1we%20原创 2022-01-07 20:05:43 · 508 阅读 · 0 评论 -
对称字符串
题目描述罗宾认为对称是一种美,他希望任何东西都是对称的,连字符串都不放过。罗宾在沙盘上 写了这样一些字符串:A1: AA2: ABAA3: ABACABAA4: ABACABADABACABA…对于给定的N ,你能根据规律输出AN 吗?输入仅有一个数: N(N≤20)。输出行字符串,表示字符串 AN 。样例输入12样例输出1ABA#include <stdio.h>#include <string.h>char s[5000000] =原创 2022-01-07 19:59:49 · 568 阅读 · 0 评论 -
统计各种字符的个数
#include <stdio.h>#include <string.h>int main() { char str[1000]; int n1 = 0, n2 = 0, n3 = 0, n4 = 0; scanf("%[^\n]s", &str); for (int i = 0; str[i] != '\0'; i++) { if (str[i] >= 'a' && str[i] <= 'z'原创 2021-03-12 15:36:21 · 371 阅读 · 0 评论 -
密码翻译。
题目描述话说猴王的徒弟小猴在他的辅导下修炼成仙,然而小猴仍在继续努力修炼中,现在的水平已超过猴王(这似乎不符合常理……) 但小猴绝不是白眼狼,不会凭着自己高强的法力与猴王斗争,反而满怀报恩的思想,他一直等待着机会的降临……终于一天,一位强大的妖魔趁小猴外出的时候,夺走了猴王(一是因为他法力不够,二是因为他已经衰老),将猴王关进了妖洞,小猴回来得知后决定去营救师父。来到师父所在的妖洞外,发现妖洞安装了带有数字密码盘电子门。小猴略显神通,用魔法得知了此门的密码,是一个由字母组成的字符串,可是密码盘上只能输入原创 2021-03-08 15:18:17 · 652 阅读 · 0 评论