- 博客(74)
- 收藏
- 关注
原创 灌溉灌溉灌溉
小蓝负责花园的灌溉工作。花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。给定花园水管的位置,请问 k 分钟后,有多少个方格被灌溉好?输入描述输入的第一行包含两个整数 n,m。第二行包含一个整数 t,表示出水管的数量。接下来 t 行
2022-03-20 12:12:55
188
原创 明码明码明码
明码汉字的字形存在于字库中,即便在今天,16 点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是 16×16 个像素信息。并把这些信息记录在字节中。一个字节可以存储 8 位信息,用 32 个字节就可以存一个汉字的字形了。 把每个字节转为 2 进制表示,1 表示墨迹,0表示底色。每行 2 个字节,一共 16 行,布局是:第 1 字节,第 2 字节第 3 字节,第 4 字节…第 31 字节, 第 32 字节这道题目是给你一段多个汉字组成的信息,每个汉字用 32 个字节表示,这里给出了字
2022-03-17 21:43:17
142
原创 A数列求值
数列求值给定数列 1, 1, 1, 3, 5, 9, 17, ⋯,从第 4 项开始,每项都是前 3 项的和。求第 20190324项的最后 4 位数字。#include <bits/stdc++.h>using namespace std;int main(){ int a[5]; a[1]=a[2]=a[3]=1; for (int i=4;i<=20190324;i++){ a[4]=(a[1]+a[2]+a[3])%10000; a[1]=a[2]; a[
2022-03-17 20:13:29
340
原创 等差素数列
题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。2,3,5,7,11,13,…2,3,5,7,11,13,… 是素数序列。 类似:7,37,67,97,127,1577,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为 3030,长度为 66。2004 年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果!有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为 1010 的
2022-03-17 19:23:00
87
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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-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-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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 111111111
7-1 最大子列和问题 (20 分)#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; int i,j; int a[n+1]; for (i=1;i<=n;i++){ cin>>a[i]; } int sum=0,count=0; for (i=1;i<=n;i++){ sum+=a[i]; if(sum<0){ sum=
2021-11-06 16:49:14
276
原创 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
原创 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
原创 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
原创 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
原创 PTA L1-078 吉老师的回归 (15 分)
L1-078 吉老师的回归 (15 分)#include<bits/stdc++.h>using namespace std;int main(){ int count,n; int num=0;//标记做了的题目数 cin>>n>>count; int i; string s; getchar(); for (i=0;i<n;i++){ getline(cin,s); int flag=1;//用来标记跳过了题目没有 for (i
2021-06-12 11:06:12
1024
3
原创 PTA L1-049 天梯赛座位分配 (20 分)
L1-049 天梯赛座位分配 (20 分)#include <bits/stdc++.h>using namespace std;int sum[111];//记录每个学校的队伍数量int pos[111][11][11];//i学校j队伍中k队员的位置int maxx,pre;//maxx记录学校中队伍数量的最大值,pre记录上一个被编号的学校int x;//记录编号int main(){ int n; cin>>n; int i,max=0;
2021-06-09 17:54:23
268
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 PTA L1-039 古风排版 (20 分)
L1-039 古风排版 (20 分)#include <bits/stdc++.h>using namespace std;int main(){ string s; int n; cin>>n; getchar(); getline(cin,s); int lie; if(s.length()%n==0){//一定要注意是不是刚刚好不然测试点1,3会出错 格式错误 lie=s.length()/n; } else { lie=s.length()/
2021-06-06 18:29:48
318
原创 PTA L1-033 出生年 (15 分)
L1-033 出生年 (15 分)#include <bits/stdc++.h>using namespace std;//桶排序记录不同数字个数int main(){ int ks,n; cin>>ks>>n; int i; int a[10]; for (i=ks;;i++){ memset(a,0,sizeof a); a[i/1000]=1; a[i/100%10]=1; a[i/10%10]=1; a[i%10]=1;
2021-06-06 18:03:01
177
原创 PTA L1-009 N个数求和 (20 分)
L1-009 N个数求和 (20 分)#include <bits/stdc++.h>using namespace std;int f1(long x,long y){ while (x%y!=0){ int z=y; y=x%y; x=z; } return y;}long fenzi=0,fenmu=1;void sum(long x,long y){ long a=fenzi*y+fenmu*x; long b=fenmu*y; long c=f1(a
2021-06-06 18:01:54
215
原创 PTA L1-008 求整数段和 (10 分)
L1-008 求整数段和 (10 分)#include <bits/stdc++.h>using namespace std;int main(){ int i,a,b; cin>>a>>b; int sum=0; int count=0; for (i=a;i<=b;i++){ printf("%5d",i); count++; if(count%5==0){ printf("\n"); } sum+=i; } i
2021-05-11 20:27:16
163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人