简单算法
黑白格人生有黑有白
这个作者很懒,什么都没留下…
展开
-
蓝桥决赛---创越雷区
标题:穿越雷区X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。 例如: A + - + - - + - - + - + + + - + - + - +原创 2017-05-26 09:29:59 · 299 阅读 · 0 评论 -
节点祖先
btree *ancertor(btree*p,btree*q,btree *root){ btree* stack[MAX_SIZE],*s,*ancor[MAX_SIZE],*r; int tag[MAX_SIZE],find; int top=-1; s=root; while(s!=NULL) { top++;原创 2016-04-16 10:59:12 · 596 阅读 · 0 评论 -
找寻路径从根root到节点p的路径函数
//从根root到节点p的路径函数void Path(btree *root,btree *p){ btree *stack[MAX_SIZE],*b; int tag[MAX_SIZE];//标记左右孩子 int top=-1,find=0; b=root; while(b!=NULL) { top++; stac原创 2016-04-16 10:25:08 · 323 阅读 · 0 评论 -
解密QQ
/*解密QQ号:首先将第 1个数删除,紧接着将第 2个数放到 这串数的末尾,再将第 3个数删除并将第 4个数放到这串数的末尾,再将第 5个数删除…… 直到剩下后一个数,将后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一 起就是小哈的 QQ*/#include<iostream>using namespace std;const int MAX_SIZE= 100 ;//队列的最大长度原创 2016-03-27 19:04:56 · 460 阅读 · 0 评论 -
链表逆转
//链表的逆转//链表结点 typedef struct node { int data; node *next; };void invert(node *head) { node *p,*q,*r; p=head; q=p->next; while(q!=NULL) { r=q->next;原创 2016-03-27 18:14:41 · 168 阅读 · 0 评论 -
迷宫
//走迷宫队列#include<iostream>using namespace std;#define M 5#define N 4//迷宫typedef struct mg{ int x,y;//每个点的位置 int pre;//记录前一个位置}Q;Q sq[300];int mg[M+2][N+2];//加圈迷宫int zx[8]={1,0,0,1,-1,-1,原创 2016-03-27 18:00:44 · 178 阅读 · 0 评论 -
计算波兰表达式
//计算波兰表达式#include<iostream>#include<string>using namespace std;const int MAX_SIZE = 100;//定义栈的最大容量typedef struct stack{ int top; int data[MAX_SIZE];}stack;stack S;/* 计算波兰表达式 数字入栈原创 2016-03-27 17:02:55 · 261 阅读 · 0 评论 -
栈括号的处理
//栈括号#include<iostream>#include<string>using namespace std;const int MAX_SIZE= 100;//定义栈的最大容量//栈typedef struct stack{ int top; int data[MAX_SIZE];}stack;stack S;//入栈void Solution(){原创 2016-03-27 16:39:26 · 231 阅读 · 0 评论 -
//任意进制间转化
//任意进制间转化#define MAXN 40void conversion(string s1,char s2[],int d1,int d2)//任意间进制转化{ int sum=0,t; for(int i=0;i<s1.size();i++) { if(s1[i]>='0'&&s1[i]<=9) t=s1[i]-'0';原创 2016-03-14 17:21:39 · 220 阅读 · 0 评论 -
二叉排序树的删除
//树节点typedef struct node{ int data; node*rchild; node*lchild;}node;node *search(node*p,int x){ if(p==NULL)return NULL; else { if(x==p->data)return p; else原创 2016-04-05 20:33:23 · 263 阅读 · 0 评论 -
深搜实例
//#include<iostream>#include<math.h>using namespace std;const int MAXN = 12;int flag[3][4];//标记数组int mat[3][4]; //填数数组int vis[10]={0}; //标记0~9的访问int zx[8]={1,1,-1,-1,0,0,1,-1};int zy[8]={0,-1,原创 2016-05-02 20:58:04 · 281 阅读 · 0 评论 -
邻接矩阵图的创建
//图#include<iostream>using namespace std;//顶点struct vertex{ int num; //顶点序号 char data; //顶点信息};//图const int MAX_SIZE = 10;typedef struct adjmax{ vertex vex[MAX_SIZE];//顶点 in原创 2016-05-04 20:37:33 · 411 阅读 · 0 评论 -
蓝桥杯决赛-----显示二叉树
标题:显示二叉树排序二叉树的特征是: 某个节点的左子树的所有节点值都不大于本节点值。 某个节点的右子树的所有节点值都不小于本节点值。为了能形象地观察二叉树的建立过程,小明写了一段程序来显示出二叉树的结构来。class BiTree { private int v; private BiTree l; private BiTree r;public BiTree(i原创 2017-05-26 08:37:44 · 355 阅读 · 0 评论 -
蓝桥决赛---五星填数
public class 五星填数 {/** * 分机号的代码粘贴过来就能用 */private static int[] a = new int[13];//创建标记数组private static boolean[] vis = new boolean[13];private static int count = 0;/** * 排列 * @param cur */priv原创 2017-05-25 21:19:58 · 205 阅读 · 0 评论 -
蓝桥决赛---分机号
标题:分机号X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:751,520,321 都满足要求,而, 766,918,201 就不符合要求。现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码?请直接提交该数字,不要填写任何多余的内容。package 蓝桥杯;public class 分机号2 { /**原创 2017-05-25 20:54:40 · 219 阅读 · 0 评论 -
蓝桥杯决赛----加法变乘法
public class 加法变乘法3 { /* * 加法变乘法 */ /*1+2+3+ … + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015*/ /** * 现在的思路就是我们已经知道总和1225,让总和减去+号变*号的两边的数,然后+两边的数相乘原创 2017-05-25 20:46:10 · 245 阅读 · 0 评论 -
蓝桥杯决赛----密文搜索
标题:密文搜索福尔摩斯从X星收到一份资料,全部是小写字母组成。 他的助手提供了另一份资料:许多长度为8的密码列表。 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。数据格式:输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024 紧接着一行是一个整数n,表示以下有n行密码,1<=n<=原创 2017-05-25 20:42:01 · 727 阅读 · 0 评论 -
蓝桥决赛---奇怪的数列
public class 奇怪的数列 {/*13 1113 3113 132113 1113122113 1113122113*/ /** * 分析我们需要每次读取到一个数,返回下一个数 * 不是直接统计完成填数,而是类统计过程中填数 * 1.把数分解到数组,2.依次读取统计3.判断当前数是否与之前数据是原创 2017-05-25 20:02:36 · 279 阅读 · 0 评论 -
蓝桥杯----生成回文数
标题:生成回文数 所谓回文数就是左右对称的数字,比如: 585,5885,123321… 当然,单个的数字也可以算作是对称的。小明发现了一种生成回文数的方法: 比如,取数字19,把它与自己的翻转数相加: 19 + 91 = 110,如果不是回文数,就再进行这个过程: 110 + 011 = 121 这次是回文数了。200以内的数字中,绝大多数都可以在30步以内变成回文数,只有一个数字很特原创 2017-05-25 18:51:15 · 660 阅读 · 0 评论 -
哈希
//初始化哈希表 for(int i=0;i<m;i++) { hashlist[i].key = 0; hashlist[i].si = 0; } for(int i=0;i<n;i++) { cin>>x[i]; } for(int i=0;i<m;i++) { su原创 2016-05-07 20:51:37 · 211 阅读 · 0 评论 -
邻接表创建图
#include<iostream>using namespace std;const int MAX_SIZE = 10;//邻接表typedef struct edgenode{ int adjvex;//邻接点序号 char info;//临接点信息 edgenode*next;//下一个指针}edgenode;struct vernode{ ch原创 2016-05-04 21:13:10 · 505 阅读 · 0 评论 -
//统计数字问题
//统计数字问题/* 统计全部页码分别用了多少0~9*/#include<iostream>using namespace std;int a[9]={0};//初始化为0void Solution(){ int n; cin>>n; for(int i=0;i<=n;i++) { int x=i; if(x==0)//原创 2016-03-11 19:15:38 · 290 阅读 · 0 评论 -
//判断院子里是否有积水
//判断院子里是否有积水//有一个M*N的院子,下雨后判断有多少积水const int MAXN =20;int faild[MAXN][MAXN];void dfs(int x,int y){ faild[x][y]='.'; for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++) {原创 2016-03-11 10:33:13 · 506 阅读 · 0 评论 -
部分和问题,深度优先搜索
//部分和问题,给定正整数a1,a2,a3...,判断是否可以从中挑几个数使其和为k#include<iostream>using namespace std;#define MAXN 100int a[MAXN];int n,k;bool dfs(int cur,int sum)//深度优先从开始状态开始遍历所有状态{ //前n项都计算过 if(cur==n) retu原创 2016-03-11 10:05:59 · 265 阅读 · 0 评论 -
//电话号码匹配问题
Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University of Waterloo by原创 2016-03-07 17:50:46 · 684 阅读 · 0 评论 -
二叉树
//二叉树(Binary Tree)二叉树由left subtree 和 right subtree组成//有一个二叉树每一个内结点就是一个开关,起初全部关闭,当一个小球落到上面时开关的状态就会发生改变//当结点上的开关关闭,则往左走,否则向右走,直到叶子结点#include<iostream>using namespace std;const int MAXD=20;int s[1<<原创 2016-03-30 21:20:34 · 206 阅读 · 0 评论 -
高精度问题分析
//高精度阶乘//高精度阶乘#include<iostream>#include<string>using namespace std;const int maxn =3000;int A[maxn];void Solution(){ int n;//输入 cin>>n; memset(A,0,sizeof(A)); A[0]=1; for(int原创 2016-03-06 21:11:32 · 279 阅读 · 0 评论 -
栈
栈是一个非常简单的数据结构,但是却是最常用的,栈就是递归的形象描述//定义栈的容量 const int MAX_STACK_SIZE =10000;typedef struct { int top;//指向栈顶元素的下个位置 int data[MAX_STACK_SIZE];//数据 }stack; int stack_size(stack *s)//返回栈的大小 {原创 2016-03-06 17:21:40 · 200 阅读 · 0 评论 -
//最大子序列递进探究
//最大子序列递进探究#include<iostream>using namespace std;void maxSubSeq(int *A,int n)//穷举法+求和{ int max=0; for(int i=0;i<n;i++)//产生子集和 { int sum=0; for(int j=0;j<n;j++)原创 2016-03-06 11:52:50 · 214 阅读 · 0 评论 -
//快排思想第k大
//快排思想第k大#include<iostream>using namespace std;int qfind(int *A,int front,int rear)//快排思想快速定位数{ if(front = rear) return front; int i=front,j=rear; int x=A[i]; while(i<j)原创 2016-03-06 10:48:07 · 199 阅读 · 0 评论 -
//第二大数(第k大数)
//第二大数int get_maxnum(int *A,int n)//得到最大值{ for(int i=0;i<n-1;i++)//一趟冒泡 if(A[i]>A[i+1]) swap(A[i],A[i+1]); return A[n-1];//返回最大值}void Solution(int *A,int n){ int max原创 2016-03-06 10:06:15 · 263 阅读 · 0 评论 -
//子集生成总结
//子集生成#include<iostream>using namespace std;#define MAXN 10void print_subset(int *A,int n,int cur)//子集生成构造法{ for(int i=0;i<cur;i++) cout<<A[i]; cout<<endl; int s=cur?A[cur-原创 2016-03-06 09:41:07 · 203 阅读 · 0 评论 -
//进制转化问题详细分析
//进制转化问题详细分析//八进制化为二进制void Solution(){ string s,ans;//定义输入与输出储存 cin>>s; int len=s.length(); int d=0;//下标 for(int i=0;i<len;i++) { switch(s[i]) { case '原创 2016-03-05 11:10:14 · 209 阅读 · 0 评论 -
简单栈应用-表达式求值
#include<iostream>#include<string>#include<stack>using namespace std;const int MAX_SIZE = 100;//栈stack<int>OPND;//数据栈stack<int>OPTR;//操作栈char q[7]={'+','-','*','/','(',')','='};//操作符char p[7][7原创 2016-03-31 17:29:44 · 291 阅读 · 0 评论 -
//回溯法搜索八皇后问题
在棋盘上放置//回溯法搜索八皇后问题#include<iostream>using namespace std;int tot=0;//统计解的个数int A[8];int n=8;//回溯法搜索八皇后问题,/* A[i]表示第i列,A[i]中存的数值表示第i列的第几个元素*/void search(int cur){ if(cur==n)//递归边界原创 2016-03-08 21:42:20 · 217 阅读 · 0 评论 -
字符串排序
node *sort(node *head){ node *head1,*p,*q,*s,*r; head1=NULL; p=head; while(p!=NULL) { s=(node*)malloc(sizeof(node)); strcpy(s->data,p->data); s->n=p->n;原创 2016-04-04 13:38:43 · 173 阅读 · 0 评论 -
蚂蚁
//蚂蚁,/*n只蚂蚁以1cm的速度在一个长为Lcm的杆子上爬行,当蚂蚁爬行到杆子的端点处就会掉下去同时蚂蚁的方向不确定,当两只蚂蚁碰到一起,将会向相反的方向爬去,询问最长时间及最短时间(注意所有蚂蚁都在爬行,只用注意一只蚂蚁就行) */int L;void Solution(int *X,int n){ int minTime=0; int maxTime=0;原创 2016-03-11 09:25:38 · 6266 阅读 · 0 评论 -
因子和乘积
//因子和乘积,输入正整数n,把阶乘分解为素因子相乘的形式从小到大输出各素数的指数#include<iostream>#include<math.h>#include<string>using namespace std;//素数判定注意素数不要太大int is_prime(int n){ for(int i=2;i<sqrt(n);i++) if(n%i==0)r原创 2016-03-10 21:48:17 · 1514 阅读 · 0 评论 -
从链表A中删除从i开始的len个元素,同时粘贴到B链表的第j元素之前
//从链表A中删除从i开始的len个元素,同时粘贴到B链表的第j元素之前#include<iostream>using namespace std;//结点typedef struct node{ int data; node *next;}node;void print(node *head){ node*p; p=head; while(p!=N原创 2016-04-03 20:49:47 · 1211 阅读 · 0 评论 -
//链表的原地逆转
//链表的原地逆转#include<iostream>using namespace std;//结点typedef struct node{ int data; node *next;}node;//创建链表node* create(){ node *head,*p,*s; head=(node*)malloc(sizeof(node)); p原创 2016-04-03 18:55:39 · 1618 阅读 · 0 评论