算法笔记
IT民工锦里
与其临渊羡鱼,不如退而结网!
一个在互联网摸爬滚打的程序媛
展开
-
力扣合并链表-Go实现
【代码】力扣合并链表-Go实现。原创 2024-01-11 17:15:10 · 364 阅读 · 0 评论 -
力扣反转链表-Go实现
【代码】力扣反转链表-Go实现。原创 2024-01-11 17:13:53 · 405 阅读 · 0 评论 -
力扣88. 合并两个有序数组-GO实现
【代码】力扣88. 合并两个有序数组-GO实现。原创 2024-01-11 17:13:06 · 343 阅读 · 0 评论 -
回文链表--Go实现
【代码】回文链表--Go实现。原创 2024-01-11 17:12:14 · 318 阅读 · 0 评论 -
PAT乙级------1004 成绩排名
1004 成绩排名 (20 分)读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩… … …第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式.原创 2021-04-08 13:27:45 · 136 阅读 · 0 评论 -
PAT乙级-----1002 写出这个数 (20 分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100 。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu注意分析题目:1、用拼音写出每一位数字,就是说用拼音来表示汉字(则意味着yi er san si wu.原创 2021-04-05 14:30:45 · 98 阅读 · 0 评论 -
普利姆算法
从树中的某一个顶点v0开始,构造生成树的算法执行过程:1)将v0到其他顶点的所有边当做侯选边2)重复一下步骤n-1次,使得其他n-1个顶点纳入生成树1. 从候选边中选出权值最小的边输出,并将与该边另一端的顶点v纳入生成树2. 考察所有剩余顶点vi,如果其余未并入生成树的个顶点vi到最后一个刚刚并入生成树的顶点(也就是v)之间的路径权值比lowcost[vi]小,就更新lowcost[vi]的值。这个值也就是下一次要纳入生成树的顶点所在的边。//---------------------------原创 2021-02-20 14:55:21 · 261 阅读 · 0 评论 -
二分查找算法
#include<stdio.h>#include<stdlib.h>//二分查找法#define N 10int barraySearch(int *arr,int low,int high,int key){//key为目标值 int mid; while(low<=high){ mid=(low+high)/2; if(arr[mid]<key){ //要查找的数小于中间的值 low=mid+1; } else if(arr原创 2020-12-23 19:28:36 · 71 阅读 · 0 评论 -
排序算法--------qsort排序指针数组
qsort排序指针数组:#include<stdlib.h>#include<stdio.h>//qsort排序指针数组//定义一个结构体指针typedef struct student_t{ int num;//学生学号 struct student_t *pNext;}Student_t,*pStudent_t;int comparePointer(const void* pleft,const void *pright){ pStudent_t* p1=原创 2020-12-20 22:37:36 · 1012 阅读 · 1 评论 -
快速排序算法-----非递归解法之qsort排序结构体数组
快速排序算法的核心思想是分制思想,从小到大排列顺序,找到一个数组中的分割值,把比分割值小的数值放在数组的左边,比分割值大的数值放在数组的右边,这样分割值的位置就被确定了,数组一分为二,我们只需要排序前一半数组和后一半数组即可,复杂度直接减半,采用这种思想不断递归,最终分割的只剩下一个元素,整个序列就变成有序的了,还有一种不使用递归的思想,使用库函数提供的qsort函数,因为qsort函数内部实现的就是,非递归的思想,使用递归的时间复杂度是logn,但是虽然分成了2个数组,但是仍然需要全部遍历数组中的原创 2020-12-20 16:06:40 · 270 阅读 · 2 评论 -
字符串反转----c语言实现
//字符串翻转#include<stdio.h>#include<stdlib.h>#include<String.h>void reverse(char *start,char *end);void reverse(char *start,char *end){ //用指针来进行移动 char tmp; while(start<end){ tmp=*start;//是start指针指向的里面的值被改变了 *start=*end原创 2020-11-27 23:09:21 · 727 阅读 · 0 评论 -
指针一点理解
指针用来干什么?需要传入较大的数据时用作参数传入数组后对数组操作函数返回不止一个结果1、需要用函数来修改不止一个变量,比如swap需要动态申请内存…指针场景一交换二个变量的值代码测试:#include<stdio.h>int main(){ void swap(int *a,int *b); //指针就是保存地址的变量 //指针场景一交换二个变量的值 int a=5; int b=6; swap(&a,&b);//把a,b的地址传进去 p原创 2020-11-15 17:41:14 · 138 阅读 · 1 评论 -
PAT----求序列前n项和(15)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。输入样例:20输出样例:32.66#include<stdio.h> int main(){ int n; double numerator=2.0;//分子 double denom原创 2020-11-09 16:28:07 · 149 阅读 · 0 评论 -
PAT---统计素数并求和
本题要求统计给定整数M和N区间内素数的个数并对它们求和。输入格式:输入在一行中给出两个正整数M和N(1≤M≤N≤500)。输出格式:在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。输入样例:10 31输出样例:7 143//统计素数并求和#include<stdio.h>int main(){ int n, m; int i; int count=0; int sum=0; scanf("%d %d",&m,&n); f.原创 2020-11-09 12:46:18 · 860 阅读 · 0 评论 -
PAT-----水仙花数
编写一个计算机程序,找出100-999之间的所有“水仙花数”,并打印运算结果.(所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身,例如:153=13^33+53^33+33^33,故153是一个水仙花数)输入一个正整数N(3<=N<=7)输出格式:按递增顺序输出所有N位水仙花数,每个数字占一行输入样例:3输出样例153370371407/*编写一个计算机程序,找出100-999之间的所有“水仙花数”,并打印运算结果.(所谓“水仙花数”是指一个三位数,其.原创 2020-11-09 11:13:41 · 565 阅读 · 0 评论 -
PAT----7-20 打印九九口诀表 (15分)
下面是一个完整的下三角九九口诀表:1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8原创 2020-11-09 09:24:12 · 1880 阅读 · 0 评论 -
前n项求和
第一种情况:求1+12+13+........+1n1+\dfrac{1}{2}+\dfrac{1}{3}+........+\dfrac{1}{n}1+21+31+........+n1代码一:#include<stdio.h>int main(){//for循环,开始和终止都明确 int n; double sum=0.0; int i; scanf("%d",&n); for(i=1;i<=n;i++){ sum+=1.0/i;//除号两边有一个是原创 2020-11-08 11:00:58 · 765 阅读 · 1 评论 -
整数逆序
三种方法实现整数逆序输出,具体情况要看具体的题目而定:代码1:#include<stdio.h>int main(){ int x=700; int end=0; while(x>0){ end=x%10; printf("%d",end); x/=10; }}代码2:#include<stdio.h>int main(){ int x; int end=0; int ret=0; scanf("%d",&x); wh原创 2020-11-07 15:52:32 · 1399 阅读 · 2 评论 -
计算平均数
计算平均数,依次输入,直到输入-1时,就结束,计算平均数。代码一://算平均数#include<stdio.h>int main(){ int number,sum=0,count=0; do{ scanf("%d",&number); if(number!=-1){ count++; sum=sum+number; } }while(number!=-1); printf("平均数是:%.2f\n",sum*1.0/count);} 因为原创 2020-11-07 15:06:43 · 2192 阅读 · 0 评论 -
猜数游戏
用到的rand()函数:每次召唤rand就会得到一个随机数。#include<studio.h>#include<time.h>#include<stdlib.h>int main(){ int a;//定义一个随机数 int count;//记录判断的次数 srand(time(0)); a=rand();//生成一个随机数 int b=a%100;//取随机数的后2位,要求只输入1~100之间的数字 int c; do{ scan原创 2020-11-07 14:08:11 · 97 阅读 · 0 评论 -
算法笔记----B1011 A+B 和 C
给定区间 [−231,231-2^{31},2^{31}−231,231 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例41 2 3.原创 2020-10-28 17:52:47 · 179 阅读 · 0 评论 -
算法笔记---B1001害死人不偿命的(3n+1)猜想
题目描述卡拉兹( Calatz)猜想:对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1(暗含了要循环,循环的条件就是n=1时退出循环,n不等于1就一直循环)。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很荒唐…此处并非要证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步才能得到n=1?输入格式每个测试输入包含1个测试用例.原创 2020-10-28 17:10:06 · 74 阅读 · 0 评论 -
PAT A1025-----算法笔记
题目:Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it is.原创 2020-10-17 20:36:06 · 136 阅读 · 1 评论 -
算法笔记---[Codeup 1934] 找x-----超详细的代码解释
题目描述 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。输入 测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。输出 对于每组输入,请输出结果。样例输入41 2 3 43样例输出2C++只找出第一个与x相等的元素下标,找到就不再往后查找因为该题目是要求输入n个数值各不相同,所以不需要考虑,输入值不同的情况,那么如果输入的值不同,又该怎么办呢,那么在扫描数组的时候for循环中.原创 2020-10-11 10:57:48 · 237 阅读 · 0 评论 -
算法笔记-----剩下的树C语言实现
有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,…,L共L+1个位置上有L+1棵树。现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。输入 两个整数L(1<=L<=10000)和M(1<=M<.原创 2020-10-02 22:34:03 · 307 阅读 · 0 评论 -
C(gcc 6.5.0)和C(clang 6.0.1),C(gcc 6.5.0)魔幻编译错误
刚刚刷PAT,害,在PAT上提交代码的时候,不清楚C(gcc 6.5.0)和C(clang 6.0.1)有什么区别,默认C(gcc 6.5.0)提交,结果就一直报错,在DEV上运行也是正确的,就在我粘贴复制到PAT的时候,一直提示我编译错误,迷了,看了描述信息,好像是数组school的问题,看了一下,我在想是不是数组太大了,要定义在main函数的外面呢,结果还是编译错误,之后又去了DEV上测试,还是正确的啊,肯定不是代码的问题了,看到下面C(clang 6.0.1),就顺手试了一下,额,柳暗花明,编译通过了原创 2020-10-02 21:43:34 · 1220 阅读 · 1 评论 -
[Error] ‘swap‘ was not declared in this sc-----C语言报错
复习指针的知识,大一的时候c就没有怎么学,结果今天写函数的时候就报错了,[Error] ‘swap’ was not declared in this sc,我自定义了一个swap交换函数,准备用指针实现,我利用的是直接交换二个变量的地址,自定义的函数要对原变量操作,所以需要用到引用&,下面是具体代码。/*指针的引用*/#include<stdio.h>void swap(int* &p1,int* &p2);/*在c语言中如果自定义的函数写在main函数的后面,原创 2020-09-26 11:32:37 · 4878 阅读 · 1 评论