- 博客(168)
- 资源 (1)
- 收藏
- 关注
原创 串部分伪代码
串部分伪代码1、以顺序存储结构表示串,设计算法。求串SSS中出现的第一个最长重复子串及其位置并分析算法的时间复杂度文字思想: 本质上就是模式匹配 假设字符串长度为n,下标从0开始: 1)i…n-1的字符依次作为子串subStr,其中i∈[0,n-1] 2)对subStr求next数组,保留其中最大值 3)对所有subStr的最大值中的最大值,就是该字符串的最大重复长度// 改进next数组int getNextMax(char *s,int *next) { // 获取s的长度
2021-09-20 15:48:33
630
原创 数组和矩阵部分伪代码
数组和矩阵部分伪代码1、编写算法,将自然数1…n21…n^21…n2按蛇形填入n×nn×nn×n矩阵中,如下图所示:13410259116812157131416文字思想: 1)创建二维数组array[n][n],初始时都设置元素值为0 2)将矩阵中元素用下标表示,可以发现每一轮横纵坐标相同的元素,其值是连续填充的,且整个遍历的轮数是2n-1,当遍历轮数为偶数时从右上遍历到左下,遍历轮数为奇数时,遍历方向为左下到右上 3)每一次填充时将当
2021-09-20 15:47:58
2548
原创 栈和队列部分伪代码
栈和队列部分伪代码1、设单链表的表头指针为LLL,结点结构由datadatadata和nextnextnext两个域构成,其中datadatadata域为字符型。试设计算法判断该链表的全部nnn个字符是否中心对称。例如XYX、XYYXXYX、XYYXXYX、XYYX都是中心对称文字思想: 1)设计一个求单链表表长函数CalLength 2)创建一个链栈B,初始时B->next = NULL,若L的表长len为奇数,则L依次遍历len/2个结点并将其依次入栈B,L = L->next,L和
2021-09-20 15:47:23
1342
原创 单链表部分伪代码
链表部分伪代码1、设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点文字思想; 1)建立递归函数,每一轮进行判断L->data是否为x,是则进行删除结点操作,然后 L = L->next,直到遍历到链表尾部L->next = NULLLNode *getElemByPos(LinkList L,int i) { int j = 1; LNode *P = L->next; if (i == 0) { return L;
2021-09-20 11:18:17
1695
原创 顺序表部分伪代码
顺序表部分伪代码2、从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。文字思想: typedef struct { ElemType data; int length; // 代表顺序表的长度 }SqList; 1)判断顺序表长度是否为0,是则表示顺序表为空,显示出错信息退出 2)用e接收待删除的元素,用L.data[L.length - 1]替换原先位置的元素,L.length减1// 伪代码
2021-09-20 11:16:57
1741
原创 【代码题专项】顺序表12
题目:已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,…,am)和(b1,b2,b3,…,bn)。试编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,…,bn)放在(a1,a2,a3,…,am)的前面。伪代码文字思想: 本题难点在于m和n大小情况未知 1)m比n大时,例子:(1,2,3,4,5)(6,7,8)——》(6,7,8)(1,2,3,4,5); 用暴力法还是比较简单的,可以另建一个新表存储,则空间复杂度为O(n),或者是将表往后移动n位,然后将(b1,
2021-09-16 11:05:34
347
原创 【代码题专项】顺序表11
题目:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表伪代码:文字思想: 在归并排序那了解到最好的情况是前一个有序表的最后一个元素比后一个有序表的第一个元素还小,则此时比较次数为n,直接将第二个表拼接到第一个表的表尾。最坏情况是交叉,如:1,3,5,7和2,4,6,8则此时比较2n-1次 1)两表表尾元素对其,比较输出值较大的元素到新表,输出元素后依旧保持表尾对其直到一个表为空 2)将剩下的表中元素依次取出放到新表的表尾,则新表称为降序排列表void addAB2C(SqLi
2021-09-16 10:06:00
131
原创 【代码题专项】顺序表10
题目:从有序顺序表中删除所有值重复的元素,使表中所有元素的值均不同。伪代码:文字思想: 例子:1,2,2,2,3,3,4——》1,2,3,4 1)因为顺序表有序,则值相同的元素必定连续出现 2)设置i从1开始遍历到L.length-1,k初始为1,若L.data[i] != L.data[i-1],L.data[k] = L.data[i];k += 1; 3)遍历到最后k所指元素后面都是重复元素,L.length = k具体实现:# include <iostream>u
2021-09-16 09:18:40
151
原创 顺序表基本功能实现完整版
一、视频讲解抽象数据类型:https://www.bilibili.com/video/BV19V411m7MB顺序存储及定义:https://www.bilibili.com/video/BV1t54y1k729顺序存储实现·上:https://www.bilibili.com/video/BV1FK4y1h7rZ顺序存储实现·下:https://www.bilibili.com/video/BV1cV411278T二、对应博客(勿记笔记)系列博客:http://www.nowamagi
2021-04-05 10:28:18
368
原创 自测-4 Have Fun with Numbers (20 分)
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a diffe
2021-04-04 16:40:43
163
原创 自测-3 数组元素循环右移问题 (20 分)
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(A_{0} A_{1}⋯A_{N−1} )变换为(A_{N−M} ⋯A_{N−1}A_{0}A_{1} ⋯A_{N−M−1})(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移
2021-04-04 15:15:55
258
4
原创 关于线性表初始化的思考和复盘
1、对线性表的认识刚接触数据结构,了解了线性表的顺序存储结构的一些概念和功能,直观上感觉就是类似于Python中的列表(list)!因为是ADT即抽象数据类型,因此一些基本的功能需要我们自己去定义实现!在对这些功能进行复盘的过程中,对于结构体的定义以及几种传参形式还不是很熟悉,于是借此review一下!2、线性表初始化的操作关于其初始化,基本上就是两个操作:设置表长是0,暂为空表分配物理内存空间3、线性表初始化的实现只有主函数+普通的结构体变量+普通变量说明:malloc函数的声明为
2021-04-03 18:03:02
961
原创 初学者易迷惑的指针、引用以及指针型引用的理解及使用
指针、引用、指针的引用的理解引用类型# include <stdio.h>int main() { // 先定义一个变量进行操作 int age = 10; // 定义引用类型变量 int &a = age; printf("age = %d, a = %d\n",age,a); // 修改引用类型变量的值 a = 21; printf("age = %d, a = %d\n",age,a); return 0;} 据底层汇编分析,引用本质上也称为
2021-04-03 12:05:54
522
原创 C语言冒泡排序及其优化
编写冒泡程序,写出最好情况与最坏情况下的时间复杂度// 编写冒泡程序,使用动态数组的创建 # include <stdio.h># include <stdlib.h>int main() { // n表示数组的元素数量 int n; scanf("%d",&n); int *a = (int *)malloc(sizeof(int) * n); // 测试数组:[10,8,9,1,2,4,0,2,8,-1] /* 冒泡排序的思想就是每两个元素之
2021-04-02 00:18:47
375
1
原创 自测-2 素数对猜想 (20 分)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。输入格式:输入在一行给出正整数N。输出格式:在一行中输出不超过N的满足猜想的素数对的个数。输入样例:20输出样例:4解题思路:/* 20以内的素数:2/3/5/7.
2021-04-01 01:20:33
160
原创 自测-1 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印***** *** * ********所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。输入格式:输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。输出格式:首先打印出由给定符号组成的最
2021-04-01 00:57:26
151
原创 实验4-2-3 验证“哥德巴赫猜想” (20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。输入格式:输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。输出格式:在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。输入样例:24输出样例:24
2021-03-10 19:35:00
759
1
原创 实验4-2-2 求e的近似值 (15 分)
自然常数e 可以用级数 1+11!+12!+⋯+1n!+⋯1+\frac{1}{1!}+\frac{1}{2!}+⋯+\frac{1}{n!}+⋯ 1+1!1+2!1+⋯+n!1+⋯来近似计算。本题要求对给定的非负整数n,求该级数的前 n+1项和。输入格式:输入第一行中给出非负整数n(≤1000)。输出格式:在一行中输出部分和的值,保留小数点后八位。输入样例:10输出样例:2.71828180代码:# include <stdio.h># include <
2021-03-10 08:52:41
520
原创 实验4-1-12 黑洞数 (20 分)
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)例如,对三位数207:第1次重排求差得:720 - 27 = 693;第2次重排求差得:963 - 369 = 594;第3次重排求差得:954 - 459 = 495;以后会停留在495这一黑洞数。如果三位数的3个
2021-03-10 08:42:04
382
原创 实验4-1-11 高空坠球 (20 分)
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?输入格式:输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。输出格式:在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。输入样例:33 5输出样例:94.9 1.0代码:# include <stdio.h>
2021-03-08 09:52:24
123
原创 实验4-1-10 兔子繁衍问题 (15 分)
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?输入格式:输入在一行中给出一个不超过10000的正整数N。输出格式:在一行中输出兔子总数达到N最少需要的月数。输入样例:30输出样例:9代码:# include <stdio.h># include <stdlib.h>int main() { int N; scanf("
2021-03-08 09:52:11
198
原创 实验4-1-9 猜数字游戏 (15 分)
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结
2021-03-08 09:51:57
342
原创 实验4-1-8 求给定精度的简单交错序列部分和 (15 分)
本题要求编写程序,计算序列部分和1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。输入格式:输入在一行中给出一个正实数eps。输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。输入样例1:4E-2输出样例1:sum = 0.854457输入样例2:0.02输出样例2:sum = 0.826310代码:# include <stdio.h># in
2021-03-08 09:51:38
164
原创 实验4-1-7 特殊a串数列求和 (20 分)
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。输入格式:输入在一行中给出不超过9的正整数a和n。输出格式:在一行中按照“s = 对应的和”的格式输出。输入样例:2 3输出样例:s = 246代码:# include <stdio.h># include <stdlib.h>int main() { int a,n,s = 0,i,temp = 0; scanf("%d %d",&a,&
2021-03-08 09:51:29
327
原创 实验4-1-6 求分数序列前N项和 (15 分)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。输入样例:20输出样例:32.66代码:# include <stdio.h># include <stdlib.h>int main() { int N; scan
2021-03-08 09:51:22
420
原创 实验4-1-5 韩信点兵 (10 分)
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:按从1至5报数,记下最末一个士兵报的数为1;再按从1至6报数,记下最末一个士兵报的数为5;再按从1至7报数,记下最末一个士兵报的数为4;最后按从1至11报数,最末一个士兵报的数为10;请编写程序计算韩信至少有多少兵。输入格式:本题无输入输出格式:输出韩信至少拥有
2021-03-08 09:51:12
689
原创 实验4-1-4 求整数的位数及各位数字之和 (15 分)
对于给定的正整数N,求它的位数及其各位数字之和。输入格式:输入在一行中给出一个不超过109的正整数N输入在一行中给出一个不超过10^{9} 的正整数N输入在一行中给出一个不超过109的正整数N输出格式:在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。输入样例:321输出样例:3 6代码:# include <stdio.h># include <stdlib.h>typedef long long int long_int;
2021-03-08 09:50:52
417
原创 实验4-1-3 找出最小值 (20 分)
本题要求编写程序,找出给定一系列整数中的最小值。输入格式:输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。输出格式:在一行中按照“min = 最小值”的格式输出n个整数中的最小值。输入样例:4 -2 -123 100 0输出样例:min = -123代码:# include <stdio.h># include <stdlib.h># define MAXS 1001int main() { int n,i = 0,j,min;
2021-03-08 09:50:40
2509
原创 实验4-1-2 求奇数和 (15 分)
本题要求计算给定的一系列正整数中奇数的和。输入格式:输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。输出格式:在一行中输出正整数序列中奇数的和。输入样例:8 7 4 3 70 5 6 101 -1输出样例:116代码:# include <stdio.h># include <stdlib.h>int main() { int number,value = 0; while(1) { scanf("
2021-03-08 09:50:29
153
原创 实验4-1-1 最大公约数和最小公倍数 (15 分)
本题要求两个给定正整数的最大公约数和最小公倍数。输入格式:输入在一行中给出两个正整数M和N(≤1000)。输出格式:在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。输入样例:511 292输出样例:73 2044代码:# include <stdio.h># include <stdlib.h>int main() { int m,n,i; scanf("%d %d",&m,&n); // 求出min(m,n)
2021-03-07 08:52:46
647
原创 实验2-4-5 简单实现x的n次方 (10 分)
本题要求实现一个计算xn(n≥0)x^{n} (n≥0)xn(n≥0)的函数。函数接口定义:double mypow( double x, int n );函数mypow应返回x的n次幂的值。题目保证结果在双精度范围内。裁判测试程序样例:#include <stdio.h>double mypow( double x, int n );int main(){ double x; int n; scanf("%lf %d",
2021-03-07 08:52:32
278
原创 实验2-4-1 统计各位数字之和是5的数 (20 分)
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。函数接口定义:int is( int number );void count_sum( int a, int b );函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式count = 满足条件的
2021-03-07 08:52:13
1998
原创 实验3-11 计算油费 (15 分)
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。输入格式:输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。输出格式:在一行中输出应付款额,保留小数点后
2021-03-07 08:51:53
247
原创 实验3-10 高速公路超速处罚 (15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。输入格式:输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。输出格式:在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。输入样例1:6
2021-03-07 08:51:41
492
1
原创 实验3-9 三天打鱼两天晒网 (15 分)
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?输入格式:输入在一行中给出一个不超过1000的正整数N。输出格式:在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。输入样例1:103输出样例1:Fishing in day 103输入样例2:34输出样例2:Drying in day 34代码:# include &l
2021-03-07 08:51:32
2121
1
原创 实验3-8 输出三角形面积和周长 (15 分)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(s−a)(s−b)(s−c)area=\sqrt{s}\sqrt{(s−a)}\sqrt{(s−b)}\sqrt{(s−c)}area=s(s−a)(s−b)(s−c) ,其中s=(a+b+c)/2。输入格式:输入为3个正整数,分别代表三角形的3条边a、b、c。输出格式:如果输入的边能构成一个三角形,则在一行内,按照
2021-03-07 08:51:21
341
原创 实验3-7 统计学生成绩 (15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:大于等于90分为A;小于90且大于等于80为B;小于80且大于等于70为C;小于70且大于等于60为D;小于60为E。输入格式:输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。输出格式:在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。输入样例:777 54 92 73 60 6
2021-03-07 08:51:10
1308
原创 实验3-6 计算个人所得税 (10 分)
假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:当工资不超过1600时,税率为0;当工资在区间(1600, 2500]时,税率为5%;当工资在区间(2500, 3500]时,税率为10%;当工资在区间(3500, 4500]时,税率为15%;当工资超过4500时,税率为20%。输入格式:输入在一行中给出非负工资。输出格式:在一行输出个人所得税,精确到小数点后2位。输入样例1:1600输出样例1:0.00输入样例2:1601输出
2021-03-07 08:50:51
1501
原创 实验3-5 查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。首先在屏幕上显示以下菜单:[1] apple[2] pear[3] orange[4] grape[0] exit用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。输入格式:输入在一行中给出用户连续输入的若干个编
2021-03-07 08:50:24
513
原创 实验3-4 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。输入格式:输入为10个字符。最后一个回车表示输入结束,不算在内。输出格式:在一行内按照letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数的格式输出。输入样例:aZ &09 Az输出样例:letter = 4, blank = 3, digit = 2, other = 1代码:# include <st
2021-03-06 12:03:29
1997
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人