自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

原创 Intel 实习mentor布置问题1

111

2022-07-19 16:54:22 352 1

原创 高软课程总结

2022-07-08 16:42:03 228

原创 96. 奇怪的汉诺塔

#include<iostream>#include<cstring>using namespace std;const int N = 15;//首先用d[i]记录三个汉诺塔时所有的方案数,三个汉诺塔时将n个盘子A->C <==> n-1个盘子A->B(借助C)//,将第n个盘子A->C,最后将n-1个盘子B->C,总共每个的方案为d[i] = 2 * d[i - 1] + 1,其中d[1] == 1//表示一个盘子时为1步//.

2020-12-29 22:00:00 112

原创 95. 费解的开关

//枚举第一行所有状态,之后再下一行对于第一行每一种状态进行处理,如果第一行对应//的列是0则必须在下一行按下对应的列,直至循环到第四行位置,这时如果第五行全部为1满足条件//否则该方案不满足条件#include<iostream>#include<cstring>using namespace std;const int INF = 100000;char g[10][10];int dx[5] = {0,-1,0,1,0},dy[5] = {0,0,1,0,-1

2020-12-29 20:59:25 152 1

原创 AcWing 94. 递归实现排列型枚举

#include<iostream>#include<vector>using namespace std;int n; vector<int> path;//对于每个数都有选和不选两种方案,如果选,数据入path,state置位1,最后回复现场。//一直枚举到所有数枚举完为止。//u表示当前选了几个数,state每个数状态void dfs(int u,int state){ if(u == n){ for(auto x:p.

2020-12-28 17:23:48 62

原创 93. 递归实现组合型枚举

#include<iostream>using namespace std;int n,m;//u表示当前需要枚举的是第几位,k表示当前需要 枚举第几个数数void dfs(int u,int k,int state){ if(k == m){ for(int i = 0;i < n;i++) if(state >> i & 1) cout << i + 1 << ' ';

2020-12-28 16:17:07 102

原创 92. 递归实现指数型枚举

#include<iostream>using namespace std;int n;//u表示当前需要枚举第几位,state代表每一位的状态,利用状态压缩,32位int足够压缩所有状态void dfs(int u,int state){ if(u == n){//注意,是到n时推出循环,不是n-1,因为到n-1表示当前需要 枚举第n位 for(int i = 0;i < n;i++) if(state >> i &a

2020-12-28 15:52:38 65

原创 快速排序

/*快速排序思想,分治,先选定一个元素,使他到达最后排序完成的位置,此时,他左边元素必定小于他,右边必定大于,之后对两边的数组进行快排。 */#include<iostream>using namespace std;void QuickSort(int a[],int s,int e){ if(s >= e) return; int i =s,j=e; int pivot = a[s]; while(i != j){ while(i < j &amp

2020-09-12 08:32:57 56

原创 归并排序

/*归并排序思路,分治思想,先把一个段分成两个,对两段分别进行归并排序,最后对两个以排好序的段进行总的排序。 */#include<iostream>using namespace std;//将两个排好序的段进行总的排序,需要用到辅助数组帮助 void Merge(int a[],int b,int m,int e,int tmp[]){ int pb = 0; //记录tmp数组下标 int p1 = b,p2 = m + 1; while(p1 <=.

2020-09-12 08:09:42 63

原创 2787:算24

/*2787:算24思路,递归,算四个数的24等于先算其中两个数,枚举加减乘除四种可能,然后算三个数。其中由于存在除法,故而应该用double来进行存储,浮点数是否等于0不能直接==0 */#include<iostream>#include<cmath>#define EPS 10e-8using namespace std;double a[8];bool isZero(double a){ return fabs(a) < EPS;}

2020-09-11 23:49:53 179

原创 放苹果

/*放苹果思路,设置函数 sep(int m,int n)表示在n个盘子里放m个苹果首先分为两种情况1. M < N,即苹果数小于盘子数,此时等价于sep(m,m)即在m个盘子里放m个苹果2.M >= N,即苹果数大于盘子数,此时又分为两种情况,a.有盘子为空 b.无盘子为空sep(m,n) = sep(m-n,n) + sep(m,n-1)递归终止条件,显然n逐次减一最终将使n == 1,此时只有一个盘子,故而只有一种放法,即将所有苹果放到该盘子中m 逐次减n且 m >

2020-09-08 22:59:03 112

原创 爬楼梯

/*爬楼梯思路,stair(n) == stair(n-1) + stair(n-2)即走n级楼梯的方案等于走 n-1级 加上n-2级递归终止条件if n == 1 return 1if n== 2 return 2; */#include<iostream>using namespace std;int stair(int n){ if(n == 1) return 1; if(n == 2) return 2; return stair(n - 1) +

2020-09-08 22:23:14 74

原创 四则运算表达式求值

/*四则运算表达式求值思路,递归解法,一个表达式有两种情况,1.只有一个项 2.两个项相互加减一个项有两种情况 1.只有一个因子 2.两个因子相互乘除一个因子有两种情况 1.只有一个数,此时递归终止,返回该数return atof() 2.( + exp() + )回到开头递归至只有一个数为止 注意,命名不规范,调试两行泪!*/#include<iostream>#include<cstdlib>#include<cstdio>using name

2020-09-06 23:19:33 135

原创 2694:逆波兰表达式

/*2694:逆波兰表达式思路,逆波兰表达式是一个递归定义的问题,首先,一个数就是一个逆波兰表达式,其次,运算符加上两个逆波兰表达式也是逆波兰表达式,故而利用递归解决 注意,exp()返回值是double,用float会报错atof定义在#include<cstdlib>中,将字符串转换为浮点数,除此外还有atoi字符串转换为int,itoa int转换为字符串 */ #include<iostream>#include<cstdio>#includ

2020-09-06 22:10:20 109

原创 N皇后

/*N皇后利用递归解决n重循环问题 思路,先摆好第k个皇后,再摆第k+1个皇后,k+1个皇后的位置不能与前k个冲突如果第k个皇后每个列号都不能摆,则退出循环终止条件是k == N */#include<iostream>#include<cmath>using namespace std;int N;int pos[100]; //pos[i]表示行号i的皇后的列号 //表示摆好第k个皇后 void Nqueue(int k){ if(k == N)

2020-09-06 14:18:08 80

原创 汉诺塔

/*汉诺塔思路,利用递归思想,首先将n-1个盘子从a柱子移动到b柱子(借助c柱子),之后将第n个圆盘从a移动到c,最后将n-1个圆盘移动到c(借助a) 递归终止条件为 n == 1 */#include<iostream>#include<cstdio>using namespace std;//将n个圆盘从s(source)经过m(mid)移动到d(dest),最下面的盘子号为ivoid hanoi(int n,char s,char m,char d,int

2020-09-06 13:05:25 69

原创 2811:熄灯问题

/*2811:熄灯问题这个枚举好难啊,说说思路吧注意枚举第一行的状态,之后依据第一行确定下一行状态,最终得出答案。*/#include<iostream>#include<cstring>using namespace std;//作用是将字符c的第i位置位状态s,注意,应该使用引用类型用于改变字符的值 void setBit(char &c,int s,int i){ if(s){ c |= (1 << i); } else{

2020-09-05 23:46:19 110

原创 假币问题

/*2692:假币问题思路。利用枚举的思想,逐个从十二个银币中枚举每个银币为轻和中的情况,函数isfake()用于判定该银币是否为假 注意,cout << "sdf" << "sdfa"是中间默认不加空格while(n--)循环自动循环n次,循环体中数值从n-1变到0 不要用right,left,不然和std里命名冲突出问题,用大写的好一些 strchr(s,c)用于判断是否有字符在字符串中,在cstring 库里,返回值是第一次出现该字符的指针 freopen用于

2020-09-05 09:53:05 269

原创 生理周期

/*生理周期设置一个k用来当记录变量思想不错 */#include<iostream>#define MAXN 21252using namespace std;int main(){ int p,e,i,d,k; //k用于记录变化中的天数 cin >> p >> e >> i >> d; for(k = d + 1;(k - p) % 23;++k); for(;(k - e) % 28;k += 23); fo

2020-09-05 01:30:14 89

原创 完美立方

开始复习了!哈哈哈。/*完美立方*/#include<iostream>#include<cstdio>using namespace std;int N;int main(){ cin >> N; int a,b,c,d; for(a = 2;a <= N;++a) for(b = 2;b < a;++b) for(c = b;c < a;++c) for(d = c;d < a;++d)

2020-09-05 01:12:50 75

原创 4144:畜栏保留问题

4144:畜栏保留问题查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述农场有N头牛,每头牛会在一个特定的时间区间[A, B](包括A和B)在畜栏里挤奶,且一个畜栏里同时只能有一头牛在挤奶。现在农场主希望知道最少几个畜栏能满足上述要求,并要求给出每头牛被安排的方案。对于多种可行方案,主要输出一种即可。输入输入的第一行包含一个整数N(1 ≤ N ≤ 50, 000),表示有N牛头;接下来N行每行包含两个数,分别表示这头牛的挤奶时间[Ai, Bi](1 ≤ A≤ B ≤

2020-09-04 11:36:33 618

原创 4110:圣诞老人的礼物-Santa Clau’s Gifts

4110:圣诞老人的礼物-Santa Clau’s Gifts查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述圣诞节来临了,在城市A中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿最多只能承受一定重量的糖果,请问圣诞老人最多能带走多大价值的糖果。输入第一行由两个部分组成,分别为糖果箱数正整数n(1 <= n <= 100),驯鹿能承受的最大重量正整数w(0 < w &lt

2020-09-02 22:51:26 221

原创 4001:抓住那头牛

4001:抓住那头牛查看提交统计提示提问总时间限制: 2000ms 内存限制: 65536kB描述农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?输入两个整数,N和K输出一个整数,农夫抓到牛

2020-09-02 22:06:31 123

原创 1724:ROADS

1724:ROADS查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述N cities named with numbers 1 … N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that needs to be paid for the road (expressed in the num

2020-08-31 22:51:21 214

原创 4103:踩方格

4103:踩方格查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;b. 走过的格子立即塌陷无法再走第二次;c. 只能向北、东、西三个方向走;请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。输入允许在方格上行走的步数n(n <= 20)输出计算出的方案数量样例输入

2020-08-31 11:22:03 255

原创 2815:城堡问题

2815:城堡问题查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述 1 2 3 4 5 6 7 #############################1 # | # | # | | ######—#####—#---#####—#2 # # | # # # # ##—#####—#####—#####—#3 # | | # # # # ##—

2020-08-31 10:23:47 90

原创 分蛋糕

描述有一块矩形大蛋糕,长和宽分别是整数w 、h。现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形、且长和宽均为整数。切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕。请计算:最后得到的m块小蛋糕中,最大的那块蛋糕的面积下限。假设w= 4, h= 4, m= 4,则下面的切法可使得其中最大蛋糕块的面积最小。在这里插入图片描述假设w= 4, h= 4, m= 3,则下面的切法会使得其中最大蛋糕块的面积最小:在这里插入图片描述输入共有多行,每行表示一个测试案例。每行是三个用空格分开的整数w, h, m

2020-08-31 08:56:34 109

原创 2020-08-31

链接:https://blog.csdn.net/qq_41731507/article/details/105227027

2020-08-31 08:54:45 47

原创 4131:Charm Bracelet

4131:Charm Bracelet查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N(1 ≤ N≤ 3,402) available charms. Each charm iin t

2020-08-30 23:06:36 197

原创 2755:神奇的口袋

2755:神奇的口袋查看提交统计提示提问总时间限制: 10000ms 内存限制: 65536kB描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。输入输入的第一行是正整数n (1 <= n <= 20)

2020-08-30 22:09:30 128

原创 2806:公共子序列

2806:公共子序列查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述我们称序列Z = < z1, z2, …, zk >是序列X = < x1, x2, …, xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, …, ik >,使得对j = 1, 2, … ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。现在给出两

2020-08-29 10:07:47 173

原创 2757:最长上升子序列

2757:最长上升子序列查看提交统计提示提问总时间限制: 2000ms 内存限制: 65536kB描述一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7),

2020-08-29 09:01:15 70

原创 求排列的逆序数

/*求排列的逆序数思路,利用分治,先求左边逆序数,再求右边逆序数,最后两边逆序数 */#include<iostream>using namespace std;//将有序的两边再进行合并 ,从大到小排序 void Merge(int a[],int s,int mid,int e,int tmp[]){ int p1 = s,p2 = mid + 1,p3 = 0; while(p1 <= mid && p2 <= e) { if

2020-08-29 00:18:26 239

原创 2760:数字三角形

2760:数字三角形查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述73 88 1 02 7 4 44 5 2 6 5(图1)图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。输入输入的是一行是一个整数N (1 < N <= 1

2020-08-28 23:35:47 165

原创 输出前m大的数

/*输出前m大的数思路,快排解决,首先将最大的m个数移动至最右边,之后对最右边的m个数进行快排得到m个最大数的有序序列,输出 复杂度O(n+mlogm)*/#include<iostream>using namespace std;typedef int ElemenType;//利用快排思想,将前m大的数放置到元素右边,输出void QuickSort(ElemenType a[],int s,int e){ if(s >= e) return; int k

2020-08-28 10:38:26 113

原创 快速排序

/*快速排序思路,也是基于分治的思想,首先选定一个枢纽元素,将比该元素大的元素放在其左边,比其小的元素放在右边对左边进行快排,对右边进行快排 递归终止条件,左边下标小于等于右边下标*/#includeusing namespace std;void swap(int &a,int &b){int temp = a;a = b;b = temp;}void QuickSort(int a[],int s,int e){if(s >= e) return;

2020-08-28 09:32:42 95

原创 分治排序

/*分治排序思路,先排序好前一半数据,再排好后一半数据,之后将两半数据合并采取递归的思想,递归终止条件是数据个数为1注意时间复杂度的计算 */#include<iostream>using namespace std;//实现将排好序的两个数组进行合并,时间复杂度数On,参数m代表中间的位置,//tmp 是辅助数组,用于暂存排序完毕后的a数组,之后将tmp中数据复制到a中 void Merge(int a[],int s,int m,int e,int tmp[]){

2020-08-28 08:46:28 105

原创 2787:算24

2787:算24查看提交统计提示提问总时间限制: 3000ms 内存限制: 65536kB描述给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。输入输

2020-08-27 22:36:48 210

原创 1664:放苹果

1664:放苹果查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。输出对输入的每组数据M和N,用一行输出相应的K。样例输入17 3样例输出8来源lwx@POJ/*1664

2020-08-27 11:19:12 140

原创 4017:爬楼梯

4017:爬楼梯查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法。输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30输出不同的走法数,每一行输入对应一行输出样例输入5810样例输出83489/*4017:爬楼梯

2020-08-27 10:23:18 172

学生成绩管理系统

题目: 学生成绩管理系统 1 功能描述 设某班有n位同学,每位同学的数据包括以下内容:学号(字符串)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。注意:输入数据时,要求学号不能相同,姓名可以相同。 2 具体设计要求 (一)程序运行时,首先显示主菜单如下: 1.新建数据 2.添加数据 3.删除数据 4.排序 5.查询 6.退出 屏幕提示:请输入序号选择相应操作。 要求当用户输入任一序号后,程序都能进行相应操作。 (二)在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下: 1.数学成绩排序 2.程序设计成绩排序 3.总分排序。 4.返回主菜单 请按序号选择相应操作。 选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。 (三)在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下: 1.学号查询 2.姓名查询 3.数学成绩查询 4.程序设计成绩查询 5.总分查询 6.返回主菜单 请按序号选择相应操作。 在子菜单中选择序号后,程序按以下方式工作: 1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束) 2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较) 3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数; 4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。

2018-10-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除