
算法
算法题+完整代码
Polaris_GQ
这个作者很懒,什么都没留下…
展开
-
海贼oj#448.抽奖
此题输入输出部分进行分别处理;有些题可以一边输入一遍进行处理,最后统一进行输出;#include <iostream> using namespace std;int main(){ int n,num; //输入部分 cin>>n; int N[n]; for(int i=0;i<n;i++){ cin>>N[i]; } cin>>num; //输出部分: for(int i=0;i<n;i++){ i...原创 2022-05-30 15:30:10 · 331 阅读 · 0 评论 -
海贼oj#148.字符串反转
#include <iostream> #include<cstring>#include<cstdio>using namespace std;int main(){ char s[55]; int n; gets(s); n=strlen(s); for(int i=n-1;i>=0;i--){ cout<<s[i]; } return 0; }原创 2022-05-30 15:26:27 · 309 阅读 · 0 评论 -
海贼oj#146.字符串
#include <iostream> #include<cstring>#include<cstdio>using namespace std;int main(){ char s[55]; int n; gets(s); n=strlen(s); for(int i=0;i<n;i++){ if(('A'<=s[i]&&s[i]<='Z')||('a'<=s[i]&&s[i]<='z.原创 2022-05-30 14:57:58 · 593 阅读 · 1 评论 -
打印九九乘法python
正确示例:for i in range(1,10): for j in range(1,i+1): if(i!=j): print("%d*%d=%d" % (i, j, i * j), end="\t") else: print("%d*%d=%d" % (i, j, i * j)) j+=1print()运行结果:错误示例:for i in range(1,10): for j原创 2022-02-13 21:43:47 · 84 阅读 · 0 评论 -
海贼oj #141. 输出字母沙漏
#include <iostream> using namespace std;int main(){ int n; cin>>n; //前n+1行 int res=2*n+1;//字母个数 char ans='A'; for(int i=1;i<=2*n+1-n;i++){ for(int k=(2*n+1-res)/2;k>0;k--){ cout<<' '; } for(int j=res/2;j>0;j--.原创 2022-01-23 15:34:19 · 536 阅读 · 0 评论 -
海贼oj#140. 输出字母菱形
#include <iostream> using namespace std;int main(){ int n; cin>>n; int res=1; char ans='A'; for(int i=1;i<=n;i++){//前n行;i行号 for(int k=(2*n-1-res)/2;k>0;k--){ cout<<' '; } for(int j=res;j>0;j--){//res代表字母个数 c.原创 2022-01-23 14:47:04 · 296 阅读 · 0 评论 -
海贼oj#139. 输出A字菱形
//找规律,列式子#include <iostream> using namespace std;int main(){ int n; cin>>n; int res=2;//单独初始化 for(int i=1;i<=n;i++){//循环n次;i行 for(int k=(2*n-res)/2;k>0;k--){ cout<<' '; } for(int j=res;j>0;j--){ cout<<'A.原创 2022-01-23 14:29:11 · 505 阅读 · 0 评论 -
海贼oj#133. 输出乘法表
#include <iostream> using namespace std;int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ cout<<i<<'*'<<j<<'='<<i*j; //cout<<i<<'*'<<j<<'='<<.原创 2022-01-23 13:15:30 · 888 阅读 · 0 评论 -
海贼oj #137. 字母三角形
#include <iostream> using namespace std;int main(){ int n; cin>>n; char res='A'; for(int i=n;i>0;i--){//考察双重循环 for(int j=i;j>0;j--){ cout<<res; res=(char)(res+1); } cout<<endl; } return 0; }...原创 2022-01-23 12:33:06 · 611 阅读 · 0 评论 -
海贼oj#136. N以内7的倍数
#include <iostream> using namespace std;int main(){ int n; cin>>n; int res=7; for(int i=2;i>0;i++){//draft可得 if(res<=n){ cout<<res<<endl; res=i*7; }else{ break; } } return 0; }原创 2022-01-23 12:23:58 · 620 阅读 · 0 评论 -
海贼oj#130. 计算复利2
#include <iostream>#include<iomanip>using namespace std;const double p=1.00417;int main(){ int m,n; cin>>m>>n; double ans=m*p;//首月计算格式不一致,单独拿出来 for(int i=1;i<n;i++){//从第2月开始,计算格式一致 ans=(m+ans)*p; } cout<<setios.原创 2022-01-23 11:36:17 · 618 阅读 · 1 评论 -
海贼oj#151. 双手石头剪刀布
//法一:蛮力法#include <iostream>using namespace std;int main(){ char a,b,c,d; cin>>a>>b>>c>>d; if((a=='Y'&&c=='H')||(a=='O'&&c=='Y')||(a=='H'&&c=='O')){ if(((a=='Y'&&d=='O')||(a=='O'&&a.原创 2022-01-22 17:27:24 · 1045 阅读 · 0 评论 -
海贼oj#120. 日期合法性
#include <iostream>using namespace std;int main(){//所有条件都考虑上 int y,m,d; cin>>y>>m>>d; if(y<=0||m<=0||m>12||d<=0){ cout<<"NO"; }else { if(m==2){ if((y%4==0&&y%100!=0)||(y%400==0)){ if(1&.原创 2022-01-22 14:59:20 · 503 阅读 · 0 评论 -
11.图的深度优先搜索——①基础
例子1:图的遍历#include <iostream>#include <vector>using namespace std;vector<int> G[110];//邻接表用动态数组实现bool vis[110];void dfs(int u){//u为某一结点,从u结点开始dfs vis[u]=true;//u结点被访问过 cout<<u<<endl; for(int i=0;i<G[u].siz原创 2021-12-06 09:59:50 · 135 阅读 · 0 评论 -
12.简单数学问题的思维拓展——①基础
例子1:判断质数#include <iostream>using namespace std;int main() { int n; cin >> n; bool is_prime=true; if(n==1){ is_prime=false; } for(int i=2;i*i<=n;i++){ if(n%i==0){ is_prime=false;原创 2021-12-06 09:15:57 · 112 阅读 · 0 评论 -
12.简单数学问题思维拓展——②强化
例子1:NOIP 2012质因数分解思路:#include <iostream>#include <cstdio>#include <cmath>using namespace std;int main(){ freopen("prime.in","r",stdin); freopen("prime.out","w",stdout); int a,i,j,max; scanf("%d",&a); for(原创 2021-12-06 08:58:23 · 151 阅读 · 0 评论 -
11.图的深度优先搜索——②强化
例子1:连通块的数量思路:#include <iostream>#include <vector>#include <cstdio>using namespace std;vector<int> G[20005];//!!!size问题bool vis[20005];//!!!size问题void dfs(int u) { vis[u] = true; for (int i = 0; i < G[u].size();原创 2021-12-06 08:43:03 · 94 阅读 · 0 评论 -
10.深度优先搜索——②强化
例子1:中国象棋思路:#include<iostream>#include<cstring>#include<cstdio>using namespace std;string map[10];bool vis[10][9];int n,m;int step[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};bool in(int x,int y){ retur原创 2021-12-06 08:32:25 · 84 阅读 · 0 评论 -
8.图论基础——①基础+②强化
例子1:无向图度数统计#include <iostream>using namespace std;int deg[105];int main() { int n, m; cin >> n >> m; for(int i=0;i<m;i++){//图这总数据结构用数组就可以搞定 int u,v; cin>>u>>v; deg[u]++; deg[v原创 2021-11-30 16:31:23 · 72 阅读 · 0 评论 -
6.排序算法——①基础
①排序算法的稳定性与不稳定性:1) 一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。2)不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地实现为稳定。1)稳定的排序算法:冒泡排序、插入排序、桶排序、计数排序、归并排序、基数排序、鸡尾酒排序、二叉树排序树排序;2)不稳定排序算法:选择排序、希尔排序、堆排序、快速排序、组合排序、平滑排序;排序算法的时间复原创 2021-11-30 15:10:42 · 116 阅读 · 0 评论 -
5.时空复杂度分析——①基础
在竞赛中,我们认为计算机一秒能执行5×108次基本计算,如果题目给出的时间限制为1秒,那么你选择的算法执行的计算次数最多应该在108量级才有可能解决这个题目。Tips: 在求空间复杂度时,特别地,在使用函数递归地时候,别忘了递归消耗的栈空间。例子1:例子2:优化抢气球#include <iostream>#include <algorithm>using namespace std;struct Node { int h, id;} stu.原创 2021-11-29 16:30:46 · 135 阅读 · 0 评论 -
查找算法——①基础
①线性查找:1)最简单的查找算法:直接用for循环扫描一遍数组,看每一个数,找到想要的数,或者统计想要的结果;//找有多少个数等于xfor (int i=0;i<n;i++){ if(a[i]==x){ cnt++; }}//找到第一个等于x的位置int p=-1;//不存在用-1表示for(int i=0;i<n;i++){ if(a[i]==x){ p=i; break;//找到要及时跳出,不要让程序继续找 }}例子1:找出符合要求的数题目:查找统原创 2021-11-29 15:15:19 · 182 阅读 · 0 评论 -
数组的下标应用——③前缀和
完整的代码#include<iostream>using namespace std;int number[10010],sum[10010];//定义数组,开足空间 int main(){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++){ //为了统一编号,读入数据时从数组下标为1开始 cin>>number[i]; } for(int i=1;i<=n;i++){ sum[i...原创 2021-11-25 23:08:31 · 297 阅读 · 0 评论 -
数组下标的应用——②计数排序
思路1)定义两个数组:一个用来存放输入的数字num[100010];另一用来存放每个数字出现的次数cnt[101];cnt数组的大小跟要统计的数字范围密切相关;num数组的大小跟要存储多少个数字有关系;2)核心部分:每个数字出现几次,就放回几次;定义一个变量index作为游标变量,每放回一个数字,游标就加一;完整代码#include<iostream>using namespace std;int cnt[101],num[100010];int main(){...原创 2021-11-23 22:05:23 · 499 阅读 · 0 评论 -
数组下标的应用——①蒜头君的数字游戏I
蒜头君有很多张写着数字的卡片,每张卡片上有一个1-10之间的整数,现在需要我们统计每张卡片多少张。思路:1)定义一个长度为11的数组存储卡片的信息;数组的下标——>表示卡片上的数字;数组元素——>表示卡片出现的次数;int cnt[11];//定义全局变量的好处:将数组元素全部初始化为02)每读入一个数,就将对应的数组元素的值加一;cin>>temp;cnt[temp]++;此时,cnt[1]中存储的是数字1出现的次数,cnt[2]中存储的数字2出现的次数;完原创 2021-11-22 21:56:32 · 3804 阅读 · 0 评论