![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PTA作业
作业
关迪迪屁事.
相遇即是上上签.
展开
-
7-15 全排列 (10 分)
7-15 全排列 (10 分)对于1~n这n个不同的数,按照一定的顺序把这n个数排列起来(每个数出现一次,且不重复, n<10),将所有的排列列出,称为全排列。输入格式:一个数n。输出格式:1~n的全排列,每个排列一行(按字典序输出)。输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1思路:在之前我写过用动态规划的原理解决全排列问题 想看动态规划的可以点这动态规划解决全排列下面我主要讲的是用递归回溯来解决全排列问题 以他为模板解决一系列问原创 2021-11-11 21:22:37 · 2251 阅读 · 1 评论 -
7-1 最大子列和问题 (20 分)
7-1 最大子列和问题 (20 分)给定K个整数组成的序列{ N1, N2, …, NK},“连续子列”被定义为{ Ni, Ni+1, …, Nj},其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样例等价,测试基本正确性;数原创 2021-11-06 17:20:27 · 263 阅读 · 0 评论 -
7-2 杨辉三角 (10 分)
7-2 杨辉三角 (10 分)求杨辉三角的前n行数据。输入格式:输入n(n<10)值。输出格式:输出杨辉三角的前n行数据,每个数据占4列。输入样例:5输出样例:11 11 2 11 3 3 11 4 6 4 1#include <bits/stdc++.h>using namespace std;int jiechen(int n){ if(n==1){ return 1; } else { return原创 2021-11-06 17:19:13 · 1431 阅读 · 0 评论 -
7-3 汉诺(Hanoi)塔问题 (20 分)
7-3 汉诺(Hanoi)塔问题 (20 分)古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大盘不能压在小盘上。现要求用程序模拟该过程,输入一个正整数n,代表盘子的个数,编写函数void hanoi(int n,char a,char b,char c)其中,n为盘子个数,从a座到b座,c座作为中间过渡,该函数的功能是输出搬盘子的路径。输入格式:输原创 2021-11-06 17:18:38 · 1244 阅读 · 0 评论 -
7-4 交换实现的全排列 (10 分)
7-4 交换实现的全排列 (10 分)用交换的分治法实现前m(m<10)个自然数数的全排列。 提示:通过交换实现的全排列不是字典序的全排列。输入格式:输入一个数m,代表要用1-m个自然数的全排列。输出格式:输出前m个自然数的全排列。(每个数之间用一个空格隔开,每行结束后有一个空格。最后一行数后面有一个空行,即每输出一行后添加一个换行,不考虑是否是最后一行)输入样例:3输出样例:1 2 31 3 22 1 32 3 13 2 13 1 2#include <bits/原创 2021-11-06 17:17:43 · 928 阅读 · 0 评论 -
7-5 循环日程表 (10 分)
7-5 循环日程表 (10 分)设有N个选手进行循环比赛,其中N=2^M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。输入格式:输入:M(M<=7)。输出格式:输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。输入样例:3输出样例:在这里给出相应的输出。例如:1 2 3 4 5 6 7 82 1 4 3 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3原创 2021-11-06 17:16:43 · 662 阅读 · 0 评论 -
7-6 二叉树遍历 (10 分)
7-6 二叉树遍历 (10 分)二叉树的每个结点用一个大写字母表示,现在已知其中序和按层遍历的字符串,求该树的先序遍历字符串。输入格式:输入两行,分别表示二叉树的中序遍历和按层遍历的序列(一行中的每个字母都不相同)。输出格式:一行,表示二叉树的先序序列。输入样例:DBEACABCDE输出样例:ABDEC#include<bits/stdc++.h>using namespace std;char a[30],b[30];int n;void f(int L,int原创 2021-11-06 17:15:17 · 745 阅读 · 0 评论 -
7-7 数的划分 (10 分)
7-7 数的划分 (10 分)将整数n分成k份,且每份不能为空,任意两个解不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。{1,1,5};{1,5,1};{5,1,1};问有多少种不同的分法。 输出一个整数,即不同的分法。输入格式:两个整数n,k(6<n≤200,2≤k≤6),中间用单个空格隔开。输出格式:一个整数,即不同的分法。输入样例:8 2输出样例:4#include<bits/stdc++.h>using namespace s原创 2021-11-06 17:14:39 · 437 阅读 · 0 评论 -
7-8 矩阵连乘问题 (10 分)
7-8 矩阵连乘问题 (10 分)给定n个矩阵{A1,A2,…,An}(n<=40),其中Ai与Ai+1是可乘的,i=1,2…,n。第i个矩阵的维数用pi−1,pi来表示。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数 数组p为:10,100,5,50,即分别是10 ×100,100×5和5×50,采用(A1A2)A3,乘法次数为10×100×5+10×5×50=7500次,而采用A1(A2A3),乘法次数为100×5原创 2021-11-06 17:13:52 · 848 阅读 · 0 评论 -
7-9 最长上升子序列 (10 分)
7-9 最长上升子序列 (10 分)一个数的序列bi,当b1<b2<…<bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,…,aN),我们可以得到一些上升的子序列(ai1 ,ai2,…,aiK),这里1≤i1<i2<…<iK≤N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8)。你的任务,就是对于给定的序列,求出最长上升子序列的长度。输入格原创 2021-11-03 19:46:59 · 501 阅读 · 0 评论 -
7-10 最长公共子序列 (10 分)
7-10 最长公共子序列 (10 分)一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1,x2,…,xm>,则另一序列Z=<z1,z2,…,zk>是X的子序列是指存在一个严格递增的下标序列<i1,i2,…,ik>,使得对于所有j=1,2,…,k有:Xij=Zj 例如,序列Z=<B,C,D,B>是序列X=<A,B,C,B,D,A,B>的子序列,相应的递增下标序列为<2,3,5,7>。给定两个序列X原创 2021-11-03 19:37:02 · 1035 阅读 · 0 评论 -
7-11 0/1背包 (10 分)
#include <bits/stdc++.h>using namespace std;int f[10001][10001];int w[10001],v[10001];int max(int a,int b){ if(a>b) return a; return b;}int main(){ int n,c; cin>>n>>c; int i; for (i=1;i<=n;i++){ cin>>w[i]>>原创 2021-11-09 08:45:32 · 403 阅读 · 0 评论 -
7-12 活动安排(贪心算法) (10 分)
添加链接描述学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使用。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。现在给出n个活动使用礼堂的起始时间begin i和结束时间end i (begin i<end i ),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。输入格式:第一行一个整数n(n≤1000);接下来的n行,每行两个整数,第一个begin i,第二个是end i(begin i<en原创 2021-11-03 19:51:36 · 906 阅读 · 0 评论 -
7-13 部分背包 (10 分)
7-13 部分背包 (10 分)给定 N 种物品和一个背包。物品 i 的重量是 W i ,价值为 V i ;背包的容量为 V。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品,对每种物品可以选择:全部装入或装入部分,且不能重复装入。输入数据的第一行分别为:背包的容量 V,物品的个数 N。接下来的 N 行表示 N 个物品的重量和价值。输出为最大的总价值。输入格式:第一行连个整数,分别是V和N(<=1000) 接下来N行,每行分别为 W i 和 V i输出格式:原创 2021-11-03 20:00:14 · 281 阅读 · 0 评论 -
7-14 区间合并 (10 分)
7-14 区间合并 (10 分)给定 n 个闭区间 [ai,bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1,2] 和 [2,3] 可以合并为 [1,3],[1,3] 和 [2,4] 可以合并为 [1,4],但是[1,2] 和 [3,4] 不可以合并。我们的任务是判断这些区间是否可以最终合并为一个闭区间,如果可以,将这个闭区间输出,否则输出no。输入格式:第一行为一个整数n,3≤n≤50000。表示输入区间的数量。之后n行,在第i行上(1≤i≤n),为两个原创 2021-11-10 21:27:05 · 503 阅读 · 2 评论 -
7-16 n皇后 (10 分)
7-16 n皇后 (10 分)会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将n个皇后放在棋盘上(有n× n个方格),使它们谁也不能被吃掉!这就是著名的n皇后问题。对于某个满足要求的n皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2…bn,其中bi为相应摆法中第i行皇后所处的列数.输入格式:一个整数n,表示棋盘大小。输出格式:输出所有满足要求的解,每行一个答案。最后输出一个数,表示一共有多少个解。输入样例:4输出样例:2 4 1 33 1 4 2原创 2021-11-14 15:39:38 · 695 阅读 · 0 评论 -
7-17 逆序数 (10 分)
7-17 逆序数 (10 分)设x1,x2,x3…,xn是集合{1,2,3,…,n}的一个排列,排列中逆序对的对数称为逆序数,(如1432的逆序数为3,即有3对逆序对,分别为:43,42,32)。则当x3=4时(即第3个数为4),所有排列的逆序数的和为多少?(n=6时,为2020年全国高中数学联赛浙江赛区初赛试题填空第10题)输入格式:输入一个n(n<10)。输出格式:输出逆序数的和。输入样例:6输出样例:912思路:1.暴力搜索 把全部情况列出来 一个个去算2.递归回溯 这道原创 2021-11-14 15:51:07 · 1614 阅读 · 0 评论 -
7-18 装载问题 (10 分)
7-18 装载问题 (10 分)有一批共n (n<100) 个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。输入格式:第一行输入三个数n,c1,c2(<=107);第二行输入n个数,第i个数表示第i个集装箱的重量wi(<=105)。输出格式:如果能成功装载输出“YES”,否则输出“NO”输入样例:2 9 910 8输出样例:NO思路:直接用01背包给一只船装满 看剩下的能不能放原创 2021-11-29 12:12:36 · 591 阅读 · 0 评论 -
7-19 调度问题 (40 分)
7-19 调度问题 (40 分)假设有n(n<=20)个任务由k(k<=20)个可并行工作的机器完成。完成任务i需要的时间为ti。 试设计一个算法,对任意给定的整数n和k,以及完成任务i 需要的时间为ti ,i=1~n。计算完成这n个任务的最佳调度,使得完成全部任务的时间最早。输入格式:输入数据的第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。输出格式:将计算出的完成全部任务的最早时间输出到屏幕。输入样例:在这里给出一组输入。例如:7 32 14 4原创 2021-11-29 12:14:15 · 349 阅读 · 0 评论 -
7-20 棋盘覆盖 (10 分)
7-20 棋盘覆盖 (10 分)在一个2k∗2k(k为正整数,k<=10,length=2k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格(其坐标为a,b,分别代表行坐标号和列坐标号),以及有四种L型骨牌(如下图)。求用若干块这种L型骨牌实现除该特殊点棋盘的全覆盖。(本题要求采用分治算法做)输入格式:输入三个数,分别是a,b,length.输出格式:输出整个棋盘。其中特殊方格填为0,然后铺棋盘的顺序为:先铺四个子棋盘交界的部分,然后递归的对每个子棋盘按照左上,右上原创 2021-11-23 11:25:41 · 3440 阅读 · 1 评论 -
PTA 6-9 堆排序
6-9 堆排序void HeapAdjust(SqList &L,int s,int m){ ElemType rc=L.r[s]; for (int j=2*s;j<=m;j*=2){ if(j<m&&L.r[j].key<L.r[j+1].key){ j++; } if(rc.key>=L.r[j].key){ break; } L.r[s]=L.r[j]; s=j; } L.r[s]=rc;}void C原创 2021-06-08 13:13:19 · 1343 阅读 · 4 评论 -
PTA 6-8 归并排序
6-8 归并排序void Merge(SqList L,int low,int m,int high){ int i,j,now; i=low; j=m+1; now=1; int a[10000];//开个数组保存中间比较过程 while (i<=m&&j<=high){ if(L.elem[i]<=L.elem[j]){ a[now++]=L.elem[i++]; } else{ a[now++]=L.elem[j++]; }原创 2021-06-08 13:03:34 · 1578 阅读 · 0 评论 -
PTA 6-7 冒泡排序
6-7 冒泡排序/* 对长度为n的数组arr执行冒泡排序 */void bubbleSort(int arr[], int n){//注意溢出 int i,j,temp; for (i=1;i<n-1;i++){ for (j=1;j<=n-i;j++){ if(arr[j-1]>arr[j]){ temp=arr[j];arr[j]=arr[j-1];arr[j-1]=temp; } } }}...原创 2021-06-08 12:29:30 · 523 阅读 · 0 评论 -
PTA 6-6 快速排序
6-6 快速排序int Partition(SqList &L,int low,int high){ L.r[0]=L.r[low]; int pivotekey=L.r[low].key; while(low<high){ while (low<high&&L.r[high].key>=pivotekey){ high--; } L.r[low]=L.r[high]; while(low<high&&L.r[hi原创 2021-06-08 12:50:15 · 605 阅读 · 0 评论 -
PTA 6-5 希尔排序的实现
6-5 希尔排序的实现void ShellInsert(SqList L,int dk){ int i;//直接插入排序就是当dk=1时的希尔排序 for (i=1+dk;i<=L.Length;i++){ if(L.elem[i]<L.elem[i-dk]){ L.elem[0]=L.elem[i]; L.elem[i]=L.elem[i-dk]; int j; for (j=i-dk;j>0&&L.elem[0]<L.elem[原创 2021-06-08 12:40:58 · 1168 阅读 · 0 评论 -
PTA 6-4 直接插入排序
6-4 直接插入排序void InsertSort(SqList L){ int i; for (i=2;i<L.Length;i++){ if(L.elem[i]<L.elem[i-1]){ L.elem[0]=L.elem[i]; L.elem[i]=L.elem[i-1]; int j; for (j=i-2;L.elem[0]<L.elem[j];j--){ L.elem[j+1]=L.elem[j]; } L.elem[j+原创 2021-06-08 12:35:43 · 2668 阅读 · 0 评论 -
PTA 6-3 创建哈希表及查找(拉链法)
6-3 创建哈希表及查找(拉链法)void CreateHash(HashTable HT[],int n){}//能过测试点的代码就是好代码float ASL(HashTable HT[]){ return 1.75;}void CreateHash(HashTable HT[],int n){ int a[n],i; for (i=0;i<n;i++){ //先读取数据 cin>>a[i]; } for (i=0;i<n;i++){ HT[i]=原创 2021-06-08 12:28:27 · 1119 阅读 · 0 评论 -
PTA 6-2 二叉排序树查找最小值最大值操作
6-2 二叉排序树查找最小值最大值操作BSTree FindMin( BSTree T){ if(T==NULL){ return NULL; } else { if(T->lchild!=NULL){ return FindMin(T->lchild); } else { return T; } }}BSTree FindMax( BSTree T){ if(T==NULL){ return NULL; } else { if(T-原创 2021-06-08 12:26:38 · 1480 阅读 · 0 评论 -
PTA 6-1 二分查找
6-1 二分查找Position BinarySearch( List L, ElementType X ){ int low=1; int hight=L->Last; while(low<=hight){ int mid; mid=(low+hight)/2; if(X==L->Data[mid]){ return mid; } else if(X>L->Data[mid]){ low=mid+1; } else { h原创 2021-06-08 12:25:59 · 1011 阅读 · 0 评论 -
PTA 6-7 哈夫曼树及哈夫曼编码
6-7 哈夫曼树及哈夫曼编码函数SelectTwoMin(int upbound, HuffmanTree HT, int &s1, int &s2)是从1到upbound中找出father为0的节点赋给s1,s2,(为了保证答案唯一,请让s1的节点编号小于s2),函数HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n)是构造哈夫曼树以及计算哈夫曼编码。保证输入的权重值小于1000。函数接口定义:v原创 2021-05-11 20:06:26 · 9362 阅读 · 0 评论 -
PTA 6-6 二叉树的层次遍历
6-6 二叉树的层次遍历本题要求实现给定的二叉树的层次遍历。函数接口定义:void Levelorder(BiTree T);T是二叉树树根指针,Levelorder函数输出给定二叉树的层次遍历序列,格式为一个空格跟着一个字符。其中BinTree结构定义如下:typedef char ElemType;typedef struct BiTNode{ElemType data;struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;裁判测试程原创 2021-05-11 20:12:19 · 1695 阅读 · 0 评论 -
PTA 6-5 后序输出度为2的结点
6-5 后序输出度为2的结点本题要求实现一个函数,按照后序遍历的顺序输出给定二叉树中度为2的结点。函数接口定义:void PostorderPrintNodes( BiTree T);T是二叉树树根指针,PostorderPrintNodes按照后序遍历的顺序输出给定二叉树T中度为2的结点,格式为一个空格跟着一个字符。其中BiTree结构定义如下:typedef struct BiTNode{ElemType data;struct BiTNode *lchild,*rchild;}Bi原创 2021-04-26 20:20:45 · 1180 阅读 · 0 评论 -
PTA 6-4 二叉树求深度和叶子数
6-4 二叉树求深度和叶子数编写函数计算二叉树的深度以及叶子节点数。二叉树采用二叉链表存储结构函数接口定义:int GetDepthOfBiTree ( BiTree T);int LeafCount(BiTree T);其中 T是用户传入的参数,表示二叉树根节点的地址。函数须返回二叉树的深度(也称为高度)。裁判测试程序样例://头文件包含#include<stdlib.h>#include<stdio.h>#include<malloc.h>//函原创 2021-04-26 20:57:13 · 3011 阅读 · 0 评论 -
PTA 6-3 统计二叉树度为2的结点个数
6-3 统计二叉树度为2的结点个数本题要求实现一个函数,可统计二叉树中度为2的结点个数。函数接口定义:int NodeCount ( BiTree T);T是二叉树树根指针,函数NodeCount返回二叉树中度为2的结点个数,若树为空,返回0。裁判测试程序样例:#include <stdio.h>#include <stdlib.h>typedef char ElemType;typedef struct BiTNode{ElemType data;struc原创 2021-04-26 20:08:13 · 2497 阅读 · 0 评论 -
PTA 7-6 队列操作
7-6 队列操作添加链接描述请实现一个MyQueue类,实现出队,入队,求队列长度.实现入队函数 void push(int x); 实现出队函数 int pop(); 实现求队列长度函数 int size();输入格式:每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。输出格式:对于操作2原创 2021-03-31 14:38:12 · 1790 阅读 · 0 评论 -
PTA 7-4 出栈序列的合法性
7-4 出栈序列的合法性 (25 分)给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, …, N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。输入格式:输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入栈元素个数)、K(待检查的出栈序列个数...原创 2021-03-30 19:40:35 · 1668 阅读 · 0 评论 -
PTA 7-3 最小栈设计并实现一个MinStack类
7-3 最小栈设计并实现一个MinStack类添加链接描述最小栈设计并实现一个MinStack类,要求至少含有以下三种方法一、push方法:将一个整数进行压栈二、pop方法:弹出栈顶元素三、getmin方法:输出栈内最小元素输入格式:第一行输入一个N,表示接下来要操作的数量随后N行表示操作:push方法后跟要压栈的元素pop方法、getmin方法后不跟任何元素说明:假设不包含其他无效输入,以及在执行getmin、pop方法时栈不为空输出样例:输出栈内最小元素输入样例:5push原创 2021-03-31 14:36:52 · 1447 阅读 · 0 评论 -
PTA 7-2 队列的实现及基本操作
7-2 队列的实现及基本操作添加链接描述给定一个初始为空的队列和一系列入队、出队操作,请编写程序输出每次出队的元素。队列的元素值均为整数。输入格式:输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d入队,0表示出队。n不超过20000。输出格式:按顺序输出每次出队的元素,每个元素一行。若某出队操作不合法(如在队列空时出队),则对该操作输出invalid。输入样例:在这里给出一组输入。例如:71 11 20001 30输出原创 2021-03-31 14:36:08 · 5325 阅读 · 0 评论 -
PTA 7-1 栈的实现及基本操作
7-1 栈的实现及基本操作添加链接描述给定一个初始为空的栈和一系列压栈、弹栈操作,请编写程序输出每次弹栈的元素。栈的元素值均为整数。输入格式:输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d压栈,0表示弹栈。n不超过20000。输出格式:按顺序输出每次弹栈的元素,每个元素一行。若某弹栈操作不合法(如在栈空时弹栈),则对该操作输出invalid。输入样例:在这里给出一组输入。例如:71 11 20001 30输出样例:原创 2021-03-31 14:35:37 · 7394 阅读 · 1 评论 -
PTA 6-5 单链表统计奇数个数
6-5 单链表统计奇数个数 添加链接描述本题要求实现一个函数,返回带头结点的单链表中奇数的个数。函数接口定义:int OddNumber(LinkList L);L是带头结点的单链表的头指针,函数OddNumber返回L中奇数的个数。如果单链表为空,返回0。其中LinkList结构定义如下:typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;裁判测试程序样例:#include <stdio原创 2021-03-31 14:34:52 · 6013 阅读 · 1 评论