- 博客(16)
- 收藏
- 关注
原创 进阶版:找出数组中第k小的数
常用的有三种方法:(假定数组下标从1开始存储数据)第一种方法:先对数组进行升序排序,再直接输出L(k)。最容易想到的也是最容易实现的,不过也是平均时间复杂度最大的,为O(nlog2n)。第二种方法:利用小根堆的特性,先线性时间内建立小根堆,再不断调整每次堆顶元素都是剩下序列中的最小元素。整体实现不算麻烦,平均时间复杂度为O(n+klog2n)。第三种方法(好多文章没讲清楚具体怎样递归子区间):从数组L[1…n]中选择枢轴pivot(或者随便选一个)进行和快速排序一样的划分操作后,表L[1…n]
2022-11-18 15:29:16
634
原创 蛇形填数(理解起来超简单!!!)
话不多说,先放原题。怎么说呢,蛇形填数这个填充矩阵的时候方法可能不是很好想,还是很抽象的,但是这个方法绝对非常好理解(边界模拟法)。首先,咱们先确定矩阵的四个边界,在赋值完最外层边界后,再往里赋值里面的一个子矩阵,不断循环,直至填充完整个矩阵。AC代码(建议先“食用”截图自己打一遍,带注释的哦):文本格式(一定要自己写一遍哈):#include<iostream>using namespace std;const int N=110;int q[N][N],n,m;in
2021-01-17 22:38:13
5042
4
原创 DFS之排列数字
解题思路:题目要求是输出所有方案,并且是按字典序,很自然的想到DFS(dfs的主要思想便是一种较为暴力的搜索,就是一条路走到底,走不下去了再进行回溯,有时候还伴随剪枝操作,非常适合一些暴力搜索可以解决的问题)。AC代码:#includeusing namespace std;const int N=10;int path[N],n;bool st[N];void dfs(int u){if(u==n){for(int i=0;i<n;i++)cout<<path[.
2020-11-01 22:41:49
256
原创 算法:DFS之 n-皇后问题(两种不同的方法)
//第一种方法思路:根据每行每列每对角线的关系进行从头行开始搜索#includeusing namespace std;const int N=20;char q[N][N];bool l[N],l[N],dg[N],udg[N];int n;void dfs(int u){if(u == n){for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<q[i][j];cout<<endl;}co..
2020-11-01 22:36:37
200
原创 题解12:归并排序
主要思想:与快速排序不同的是,快速排序是先排再递归,而归并排序是先分割递归再排。归并排序难点在于对于你所分割的区间经过处理后的合成。AC 代码:#includeusing namespace std;const int N=100010;int q[N],n,temp[N];void mergesort(int q[],int l,int r){if(l>=r)return;int mid=(l+r)/2;mergesort(q,l,mid);mergesort(q,mid+.
2020-09-12 14:48:36
193
原创 题解11:区间交交
基本思想:先把第一个区间里面的存放进结构体中,接着用循环对第二个区间的值进行输入和对第一个区间的判断,最后输出结果,一定是两个两个进行比较,因为是成对的。AC代码:#include<stdio.h>struct list{double b;double e;}sz[100];//定义一个结构体,用来存放第一个区间内的数据int main(){int n,m,i,j,...
2019-12-30 20:40:01
636
1
原创 题解10:开关灯
基本思路:从前往后,只要是某个人的对应倍数编号,便进行相反处理,最后按照格式输出关闭的灯的编号AC代码:#include<stdio.h>int main(){int n,k,i,j;bool a[5001]={1};scanf("%d%d",&n,&k);for(i=1;i<=k;i++)for(j=i;j<=n;j+=i)//满足倍...
2019-12-25 21:31:39
676
原创 题解9:正常血压
基本思路:清楚输入后,理理思路,对连续的时长进行记录,但是有不正常的血压的话可以通过再建一个变量的方式进行对最长的连续时长的记录,最后输出。AC代码:#include<stdio.hint main(){int i,n,a,b,k=0,f=0;scanf("%d",&n);//输入血压的个数for(i=1;i<=n;i++){scanf("%d%d",&...
2019-12-25 21:31:08
1129
3
原创 题解8:津津的储蓄计划
基本思路:题目要求输入每个月的预期花销,可以通过循环来实现,并且要注意判断钱够花不够花的问题,结合题目选择输出,基本逻辑就是先加300,减去预期花销,判断条件,继续循环输入预期花销,都满足的话最后输出题目要求的钱数。AC代码:#include<stdio.h>int main(){int i,a=0,b,c=0;for(i=1;i<=12;i++)//十二个月{s...
2019-12-25 21:29:42
1768
2
原创 题解7:球弹跳高度的计算
基本思想:题目要求求球在第10次落地时,经过多少米, 第10次落地反弹的高度是多少,首先要注意起始高度别忘了,其次再对题目进行分析,弄明白球每落地一次前后的状态,最后是代码的实现。AC代码#include<stdio.h>#include<math.h>int main(){int i,h;double sum,a;//注意数据类型scanf("%d",&...
2019-12-25 21:28:06
3179
6
原创 题解6:斐波那契数列
基本思路:求解此题应该先把题目的规律找到,并且题目中告诉很明确,只用解决代码的实现问题就行了。AC代码:#include<stdio.h>int main(){int i,k;scanf("%d",&k);//要求的第k个数int a[k+10]={0};a[0]=1;//第一个数为1a[1]=1;第二个数为1for(i=2;i<=k;i++)a[...
2019-12-25 19:37:19
295
原创 题解5:高精度减法
基本思路:对于给定的两个数值,把其当成字符串,进一步转化成整型,逆序存放在整型数组中,对其每一个位进行相减,但是要注意借位的使用,最后为了保险在设置一个循环,把前置0去掉,最后输出结果。AC代码:#include<stdio.h>#include #include <string.h>#define N 100010;using namespace std;...
2019-12-13 22:35:42
239
原创 题解4:高精度加法
基本思想:涉及到大数的计算,应该用高精度加法进行运算(高精度加法:一种精确到位的算法,把输入的两个数当作字符串,逆序把每个“字母”分给数组,再通过一位的加法和进位的方式进行计算的算法)AC代码:#include#include<string.h>using namespace std;int aa[100001],bb[100001],cc[100001];//用作存放的...
2019-12-11 22:19:30
305
原创 题解3:快速排序
基本思路:该题有时间限制,所以应该用快速排序的方式进行排序。(快速排序:对于输入的一系列整数,先选一个基准,将比他小的放在左边,比它大的放在右边,再从两边开始扫描,每扫描一次就更换扫描方向(先从右或先从左),不断进行调整,知道达成目的为止)AC代码:#include <stdio.h>const int N=1000010;int q[N];void swap(int *...
2019-12-09 22:57:51
274
原创 题解2:Supper字符串
基本思路:为了简便,先把整个字符串对应的字母都换成大写或小写,然后对每一个出现的字母进行记录次数,把最大的那个次数求出来,乘以2与n进行比较,满足条件则直接输出,否则n–;进行判断,最后将符合条件的输出。AC代码:#include<string.h>#includeusing namespace std;int main(){char c[10000],b[10000...
2019-12-09 22:57:34
233
原创 题解1:求一系列整数中出现最多的数字
题目:思路:输入该数后,先进行数位分离,找出出现次数最多的那一个次数;然后运用循环进行遍历,当最大次数与对应数出现的次数相等的时候,输出数。AC代码:#include<stdio.h>int main(){int n,i,max=0;scanf("%d",&n);int b[20]={0},s[n+10];//用数组进行存放,用的时候比较简便for(i=...
2019-12-09 22:56:40
769
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人