3.23Code

 基于递归的折半查找

【注意】真的mid下标是begin+我想的mid!!!

#include<iostream>#define MAXSIZE 100using namespace std;void HalfSearch(int a[],int e,int begin,int end){if(end<=begin){cout<<"NO"<<endl;return;}int mid=begin+(end-begin)/2; //注意mid!!! if(a[mid]==e){cout<<"YES"<<endl;return;}else if(a[mid]<e){HalfSearch(a,e,mid+1,end); }else {//mid>eHalfSearch(a,e,begin,mid-1);}}int main(){int n;cin>>n;while(n!=0){int a[MAXSIZE];for(int i=0;i<n;i++)cin>>a[i];int e;cin>>e;HalfSearch(a,e,0,n-1);cin>>n;} return 0;
} 

二叉排序树的判定

#include<iostream>using namespace std; typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateTree(BiTree &T){char root;cin>>root;if(root=='#'){T=NULL;return; }T=new BiNode;T->data=root; CreateTree(T->lchild);CreateTree(T->rchild); }bool Check(BiTree T){if(T->lchild){if(T->data<T->lchild->data)return false;}if(T->rchild){if(T->data>T->rchild->data)return false;}return true;
}int main(){while(true){BiTree T;CreateTree(T);if(!T)break;if(Check(T))cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}

二叉排序树的限定条件下的数据输出

(因为检测输出时最后一个位置不能有括号,所以用了一个tag引用来标记!)

#include<iostream>using namespace std; typedef struct BiNode{int data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateTree(BiTree &T,int data){if(!T){T=new BiNode;T->data=data;T->lchild=NULL;T->rchild=NULL;return;}else{if(data<T->data){CreateTree(T->lchild,data);}elseCreateTree(T->rchild,data);}}bool Check(BiTree T){if(T->lchild){if(T->data<T->lchild->data)return false;}if(T->rchild){if(T->data>T->rchild->data)return false;}return true;
}void MidTraverse(BiTree T,int x,int &tag){if(T){BiTree p=T;if(p->data<x){MidTraverse(p->rchild,x,tag);}else if(p->data>=x){MidTraverse(p->lchild,x,tag);if(tag==1)cout<<" ";cout<<p->data;if(tag==0)tag=1;MidTraverse(p->rchild,x,tag);}}}int main(){while(true){int n;cin>>n;if(n==0)break;BiTree T=NULL;int data;for(int i=0;i<n;i++){cin>>data;CreateTree(T,data);}int x;cin>>x;int tag=0;MidTraverse(T,x,tag);cout<<endl;}return 0;
}

————————————华丽的分界线:以下是大重点——————————

查找链表倒数第k个元素——快慢指针!

#include<iostream>using namespace std;typedef struct LNode{int data;struct LNode *next; 
}LNode,*LinkList;void CreateList(LinkList &L,int n){LinkList t=L;for(int i=0;i<n;i++){LinkList p=new LNode;cin>>p->data;p->next=NULL;while(t->next)t=t->next;t->next=p;t=p;}
}void GetLastK(LinkList L,int k){LinkList slow=L->next;LinkList fast=L->next;int cnt=0; //往后移动k步 while(cnt<k){cnt++;fast=fast->next;}while(fast){slow=slow->next;fast=fast->next;}cout<<slow->data<<endl;
}int main(){int n;cin>>n;while(n!=0){LinkList L;L->next=NULL;CreateList(L,n);int k;cin>>k;GetLastK(L,k);cin>>n;}return 0;
}

数组的循环左移(真·循环+左移....)

#include<iostream>using namespace std;void MoveLeft(int *a,int len,int p){while(p!=0){p--;int tmp=a[0];for(int i=0;i<len;i++){a[i]=a[i+1];}a[len-1]=tmp;}
}void ShowArray(int *a,int len){for(int i=0;i<len;i++){cout<<a[i];if(i!=len-1)cout<<" ";}cout<<endl;
}int main(){int n;cin>>n;while(n!=0){int *a=new int[n];for(int i=0;i<n;i++)cin>>a[i];int p;cin>>p;MoveLeft(a,n,p);ShowArray(a,n);cin>>n;}return 0;
}

数组的主元素查询

#include<iostream>using namespace std;int FindMain(int *a,int n){//一共要进行n-1次 for(int i=0;i<n-1;i++){for(int j=0;j<n-i-1;j++){if(a[j]>a[j+1]){int t=a[j+1];a[j+1]=a[j]; a[j]=t;}}}	int m=n/2-1;if(a[m]==a[m+1])return a[m];else return -1;
}void ShowArray(int *a,int len){for(int i=0;i<len;i++){cout<<a[i];if(i!=len-1)cout<<" ";}cout<<endl;
}int main(){int n;cin>>n;while(n!=0){int *a=new int[n];for(int i=0;i<n;i++)cin>>a[i];cout<<FindMain(a,n)<<endl;cin>>n;}return 0;
}

数组的分割

【思路】其实就是找较小的一半数组和较大的一半数组。找中位数的方法简单但笨。因此选择快速排序的思想,用枢轴变量

#include <stdio.h>
#define LEN 20000int FindMidPosition(int a[],int low,int high)
{int temp=a[low];while(1){while(low<high&&a[high]>=temp){high--;}if(low>=high){break;}a[low++]=a[high];while(low<high&&a[low]<=temp){low++;}if(low>=high){break;}a[high--]=a[low];}a[low]=temp;return low;
}void Divide(int a[],int start,int end,int n)
{int mid;while(start<end){mid=FindMidPosition(a,start,end);if(mid==n/2){break;}else if(mid<n/2){start=mid+1;}else{end=mid-1;}}
}void OutputArray(int a[],int start,int end)
{int i;for(i=start;i<=end-1;i++){printf("%d ",a[i]);}printf("%d\n",a[i]);
}int main()
{int n,i;while(1){scanf("%d",&n);if(n==0){break;}else{int a[LEN];for(i=0;i<n;i++){scanf("%d",&a[i]);}Divide(a,0,n-1,n);OutputArray(a,0,n/2-1);OutputArray(a,n/2,n-1);}}return 0;
}

二叉树的WPL计算

#include<iostream>
#include<stdio.h>
using namespace std;typedef struct BiNode{int data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateTree(BiTree &T){int data;cin>>data;if(data==0){T=NULL;return;}T=new BiNode;T->data=data;CreateTree(T->lchild);CreateTree(T->rchild); 
}void WPL(BiTree &T,int &nowValue,int &pathlen){if(!T->lchild && !T->rchild){//遇到了叶子结点nowValue+=T->data*pathlen;return;}if(T->lchild){pathlen++;WPL(T->lchild,nowValue,pathlen);pathlen--;}if(T->rchild){pathlen++;WPL(T->rchild,nowValue,pathlen);pathlen--;}
}int main(){while(1){BiTree T;CreateTree(T);if(!T)break;int wpl=0;int len=0;WPL(T,wpl,len);cout<<wpl<<endl;}return 0;
}

奇偶链表的分割

【总结】这种要求O(1)空间复杂度的,需要有一个东西记录住头,还需要有一个穿针引线的指针,去按我们需要的顺序把结点重新穿起来

void Divide(LinkList &L){LinkList p=L,r=L->next;LinkList myL;LinkList q=myL; int cnt=1;while(r){if(cnt%2==0){q->next=r;q=r;}else{p->next=r;p=r;}r=r->next;cnt++;}q->next=NULL;p->next=myL->next;}

找出数组中和为目标值的两个数

#include<iostream>using namespace std;#define MAXSIZE 100void GetTwo(int a[],int n,int &p,int &q,int target){for(int i=0;i<n;i++){p=a[i];q=target-a[i];for(int j=0;j<n;j++)if(a[j]==q && i!=j){p=i;q=j;return;}}
}int main(){int n;cin>>n;while(n!=0){int a[n];for(int i=0;i<n;i++)cin>>a[i];int target;cin>>target;int p,q;GetTwo(a,n,p,q,target);cout<<p<<" "<<q<<endl;cin>>n;}	
}

删除链表中的倒数第k个结点

#include<iostream>using namespace std;typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;void CreateList(LinkList &L,int n){L->next=NULL;LinkList t=L;for(int i=0;i<n;i++){LinkList p=new LNode;cin>>p->data;p->next=NULL;while(t->next)t=t->next;t->next=p;t=p;}
}bool IsEmpty(LinkList L){if(L->next==NULL) return true;else return false;
}void PrintList(LinkList L){LinkList p=L->next;while(p){cout<<p->data;if(p->next)cout<<" ";p=p->next;}cout<<endl;
}//删除倒数第k个结点 
void DeleteList(LinkList &L,int k){LinkList slow=L->next;LinkList fast=L->next;LinkList preSlow=L;int cnt=1;while(cnt<=k){cnt++;fast=fast->next;} while(fast){slow=slow->next;preSlow=preSlow->next;fast=fast->next;}preSlow->next=slow->next;if(IsEmpty(L))cout<<"The LinkList is Empty !"<<endl;elsePrintList(L);
}int main(){int n;cin>>n;while(n!=0){LinkList L;CreateList(L,n);int k;cin>>k;DeleteList(L,k);cin>>n;}return 0;
}

基于链表的两数之和

【总结】本题涉及了一个关于进位的事就是写成if 9XXX,不要害怕

#include<iostream>using namespace std;typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;//头插法创建链表 
void CreateList(LinkList &L,int n){L=new LNode;L->next=NULL;LinkList t=L;for(int i=0;i<n;i++){LinkList p=new LNode;cin>>p->data;p->next=NULL;p->next=t->next;t->next=p; }}bool IsEmpty(LinkList L){if(L->next==NULL) return true;else return false;
}void PrintList(LinkList L){LinkList p=L->next;while(p){cout<<p->data;if(p->next)cout<<" ";p=p->next;}cout<<endl;
}void Sum(LinkList &L1,LinkList &L2,LinkList &L3){LinkList p1=L1->next;LinkList p2=L2->next;LinkList p3=L3;int c=0; //用来储存进位 while(p1 && p2){int sum=p1->data+p2->data+c;if(sum>=10){sum-=10;c=1;} else c=0;LinkList node=new LNode;node->data=sum;node->next=NULL;p3->next=node;p3=node;p1=p1->next;p2=p2->next;}if( p1 && p1->data==9 && c==1){LinkList node1=new LNode;node1->data=0;LinkList node2=new LNode;node2->data=1;node1->next=node2;node2->next=NULL;p3->next=node1;}else if( p2 &&p2->data==9 && c==1){LinkList node1=new LNode;node1->data=0;LinkList node2=new LNode;node2->data=1;node1->next=node2;node2->next=NULL;p3->next=node1;}else if(c==1){LinkList node=new LNode;node->data=1;node->next=NULL;p3->next=node;}
}int main(){int m,n;cin>>m>>n;while(n!=0 && m!=0){LinkList L1;CreateList(L1,m);LinkList L2;CreateList(L2,n);LinkList myL;myL->next=NULL;Sum(L1,L2,myL);PrintList(myL);cin>>m>>n;}return 0;
}

交换链表中的两个结点

【注】有时候的交换其实就是值的交换,不用捣腾指针,而且注意更改指针后,后移不要盲目的想成p=p->next

#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode {int data;struct Lnode *next;
} Lnode, *Linklist;void Init_Linklist(Linklist &l) {l = new Lnode;l->next = NULL;
}void CreatLinklist(Linklist &l, int n) {Linklist p = l;Linklist r;for (int i = 1; i <= n; i++) {r = new Lnode;cin >> r->data;r->next = p->next;p->next = r;p = r;}
}void Exchange(Linklist &l) {Linklist p = l->next;while (p) {if(p->next != NULL){swap(p->data, p->next->data);p = p->next->next;}else{break;}}
}void Out(Linklist &l) {Linklist p = l->next;while (p->next) {cout << p->data << " ";p = p->next;}cout << p->data << endl;
}
int main() {while (1) {int n;cin >> n;if (n == 0) break;Linklist l;Init_Linklist(l);CreatLinklist(l,n);Exchange(l);Out(l);}return 0;
}

链表的循环右移(这个没有要头结点。先成环,再去掉链接)

#include<iostream>using namespace std;typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;//创建链表 
void CreateList(LinkList &L,int n){L=new LNode;L->next=NULL;cin>>L->data;LinkList t=L;for(int i=0;i<n-1;i++){LinkList p=new LNode;cin>>p->data;p->next=NULL;t->next=p;t=p; }}void Move(LinkList &L,int k){LinkList cur=L;int cnt=1;while(cur->next){cur=cur->next;cnt++;}cur->next=L;int m=cnt-k%cnt;for(int i=0;i<m;i++)cur=cur->next;LinkList newp=cur->next;cur->next=NULL;L=newp; 
}void PrintList(LinkList L){LinkList p=L;while(p){cout<<p->data;if(p->next)cout<<" ";p=p->next;}cout<<endl;
}int main(){int n;cin>>n;while(n!=0){LinkList L;CreateList(L,n);int k;cin>>k;Move(L,k);PrintList(L);cin>>n;}return 0;
}

查找数组中缺失的数字

#include<iostream>using namespace std;void FindNum(int a[],int n){int ans[n];for(int i=0;i<n;i++){int index=(a[i]-1)%n;a[index]+=n;}int k=0;for(int i=0;i<n;i++){if(a[i]<=n){ans[k]=i+1;k++;}}for(int i=0;i<k;i++){cout<<ans[i];if(i!=k-1)cout<<" "; }if(k==0)cout<<"Not Found" ;cout<<endl;}int main(){int n;cin>>n;while(n!=0){int a[n];for(int i=0;i<n;i++){cin>>a[i];}	FindNum(a,n);cin>>n;	}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMMA数据处理问题(七)

phase_sim_orb报这个错是什么原因呢&#xff0c;说是我的hgt文件和模拟的干涉图行数不匹配&#xff0c;之前geocode生成hgt的参数不是在mli.par文件中看吗&#xff0c;为什么会出现行数不匹配的情况啊&#xff0c;难道不是par文件中里面看&#xff1f;&#xff1f;&#xff1f;…

2024年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待…

2024年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中&#xff0c;敬请期待… 武汉唯众智创科技有限公司 2024 年 3 月 联系人&#xff1a;辜渝傧13037102709 题号&#xff1a;试题05 ZZ052-大数据应用与服务赛项试题 05 模块一:平台搭建与运维 (一…

幻兽帕鲁Linux服务器安装Mod

系列文章目录 幻兽帕鲁游戏搭建&#xff08;docker&#xff09; 幻兽帕鲁服务器安装Mod&#xff08;Linux&#xff09; 文章目录 系列文章目录前言一、Mod类别1.模型mod2.功能性mod 二、ue4ss三、Mod选择1. N网2. 3DM MOD 四、服务器安装1.关闭服务2.上传mod3.启动服务 总结 前…

深度分析鸿蒙应用开发的准确红利期、前景、未来发展方向

近年来&#xff0c;随着互联网技术的不断发展&#xff0c;鸿蒙生态开发逐渐成为热门话题。作为一种新兴的操作系统&#xff0c;其发展趋势备受关注。同时&#xff0c;鸿蒙生态开发的价值、就业岗位需求以及相关学习方面也引起了广泛关注。 那么就目前的形势来看&#xff0c;鸿…

Docker专题-03 Log-Driver日志转存

Docker专题教程 注&#xff1a; 本教程由羞涩梦整理同步发布&#xff0c;本人技术分享站点&#xff1a;blog.hukanfa.com 转发本文请备注原文链接&#xff0c;本文内容整理日期&#xff1a;2024-03-19 csdn 博客名称&#xff1a;五维空间-影子&#xff0c;欢迎关注 说明 容器…

软考 系统架构设计师系列知识点之系统性能(1)

所属章节&#xff1a; 第2章. 计算机系统基础知识 第9节. 系统性能 系统性能是一个系统提供给用户的所有性能指标的集合。它既包括硬件性能&#xff08;如处理器主频、存储器容量、通信带宽等&#xff09;和软件性能&#xff08;如上下文切换、延迟、执行时间等&#xff09;&a…

【深度学习】四种天气分类 模版函数 从0到1手敲版本

引入该引入的库 import torch import torch.nn as nn import matplotlib.pyplot as plt import torch.nn.functional as F import torchvision import torch.optim as optim %matplotlib inline import os import shutil import glob os.environ["KMP_DUPLICATE_LIB_OK&q…

算法之插入排序

算法之插入排序 插入排序 核心思想&#xff1a;将待排序数插入到已经拍好的有序区的合适的位置 nums [9, 1, 8, 5, 6] nums [None] nums length len(nums) print(nums[1:], length) # 1: 从索引1开始&#xff0c;排除 None count_move 0for i in range(2, length):nums…

银行监管报送系统介绍(三):对外金融资产负债及交易统计申报

为保证国际收支统计及时、全面反映涉外经济活动变化&#xff0c;国家外汇管理局定期修订统计制度。日前&#xff0c;国家外汇管理局修订发布《对外金融资产负债及交易统计业务指引&#xff08;2024年版&#xff09;》&#xff08;汇发〔2024〕8号文印发&#xff0c;以下简称《业…

iOS应用审核问题解决方案及优化方法 ✨

摘要 本文将针对iOS应用提交审核时可能遇到的问题&#xff0c;如“你必须在Xcode中添加com.apple.developer.game-center密钥”&#xff0c;以及突然间提交送审报错情况进行探讨。通过大量查询资料和尝试&#xff0c;结合案例分析&#xff0c;提供了解决方案和优化方法&#x…

自定义Redis工具类(解决缓存穿透和击穿)

自己封装了一个Redis工具类&#xff0c;帮助完成开发中的缓存穿透&#xff0c;缓存击穿的问题。 import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import org.springframew…

【模糊逻辑】Type-1 Fuzzy Systems-2

【模糊逻辑】Type-1 Fuzzy Systems 3.4.3 模糊化及其推理的影响3.4.3.1 Singleton Fuzzifier例3.5例3.6 3.4.3.2 Non-Singleton Fuzzifier例3.7 Non-Singleton Fuzzifier 量化求解 Firing Level 3.5 对规则触发&#xff08;Fired-Rule&#xff09;的输出集进行组合3.5.1Mamdani…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中&#xff0c;可以通过多种方法来查看版本号。以下是几种常用的方法&#xff1a; 使用cat命令查看/etc/centos-release文件&#xff1a; CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容&#xff0c;从而获得C…

力扣hot100:153. 寻找旋转排序数组中的最小值(二分的理解)

由力扣hot100&#xff1a;33. 搜索旋转排序数组&#xff08;二分的理解&#xff09;-CSDN博客&#xff0c;我们知道二分实际上就是找到一个策略将区间“均分”。对于旋转数组问题&#xff0c;在任何位置分开两个区间&#xff0c;如果原区间不是顺序的&#xff0c;分开后必然有一…

BRAM底层原理详细解释(1)

目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能&#xff08;Byte-Write Enable&#xff09;- WEA and WEBWE&#xff1a; 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…

【c++初阶】C++入门(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

AI元年,这5款AI写作能为你提供帮助

自从人工智能技术的迅猛发展以来&#xff0c;AI在各个领域都取得了巨大的进步。其中&#xff0c;AI写作工具成为越来越多人关注的焦点。在这个AI元年&#xff0c;小编想向大家分享5款可能对你有帮助的AI写作工具&#xff0c;如果你也想找AI写作相关的工具&#xff0c;那么来看看…

【数据结构基础】之八大排序(C语言实现)

【数据结构基础】之八大排序(C语言实现&#xff09; &#x1f427; 冒泡排序♈️ 冒泡排序原理及代码实现♈️ 稳定性分析 &#x1f427; 选择排序♈️ 选择排序原理及代码实现♈️ 稳定性分析 &#x1f427; 插入排序♈️ 插入排序的原理及代码实现♈️ 稳定性分析 &#x1f4…

《单例模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 本章简要说明单例模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案&#xff1a; 单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点。优点&…

素数问题 python

# 输出1-100所有质数 import math count 0 for i in range(2, 101):is_prime True # 假设当前数是素数for j in range(2, int(math.sqrt(i))1):if i % j 0:is_prime False # 如果能被整除&#xff0c;不是素数break # 直接中断内层循环if is_prime:count 1print(i)prin…