- 博客(49)
- 收藏
- 关注
原创 8皇后
/*8皇后*/#include "stdafx.h"#include using namespace std;#define N 8int cnt;bool legal( int list[] , int num , int cur_step ){ int i; for( i = 1 ; i < cur_step ; i ++ ) { //行不冲突,对角线不冲突
2013-10-08 19:21:37
230
原创 树的遍历
//创建树、遍历树、线索树/*typedef struct Node { char value; struct Node * lchild; struct Node * rchild;}BT_Node , *BT_Pointer;void create_BT( BT_Pointer & T ) { char c; c = getchar(); if( c == '^' )
2013-10-08 17:15:04
219
原创 对一个整数数组,求最大的(a[i]-a[j])(0<=i<j<=n-1)
/*对一个整数数组,求最大的(a[i]-a[j])(0<=i<j<=n-1)*/#include "stdafx.h"#include using namespace std;typedef struct node{ int large; int small;}node;int max_;node _get( int list[] , int s , int e ){
2013-09-29 11:33:43
255
原创 最长公共连续子串
//求两个串的最长公共连续子串#include using namespace std;int dp[ 100 ][ 100 ];int max_length;void get_length( char str1[] , char str2[] ) { int length1 = strlen( str1 ); int length2 = strlen( str2 ); i
2013-09-23 17:01:29
258
原创 求m的n次方
//求m的n次方//假设所有数据都在int范围内#includeusing namespace std;int m_n( int m , int n ){ int k = m; int t = 1; int p = 1; if( n == 0 ){ return 1; } while( p <= n ) { if( ( p & n ) > 0 ) { t = k
2013-09-19 20:25:56
291
原创 旋转数组中的最小元素
//在旋转的有序数组中找最小值#includeusing namespace std;int search( int list[] , int length , const int v ) { int s = 0; int e = length; while( s <= e ) { int mid = ( s + e ) / 2; if( list[ mid ] == v )
2013-09-19 20:13:28
192
原创 尼克的任务
/*问题描述】尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完戍,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开
2013-09-19 10:42:53
263
原创 背包
/************************************************************************//* 01背包 *//***************************************************
2013-09-18 22:16:54
214
原创 lcs
#includeusing namespace std;int record[ 100 ][ 100 ];int dp[ 100 ][ 100 ];char str1[ 100 ];char str2[ 100 ];void lcs( ) { memset( record , 0 , sizeof( record ) ); if( ( str2 == NULL ) && (
2013-09-18 19:31:01
219
原创 中序、先序、后序的互转
/************************************************************************//* 中序先序转后序 *//********************************************************
2013-09-17 21:20:47
260
原创 找字符串里最长的对称子串
/*题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串 “ google ” ,由于该字符串里最长的对称子字符串是 “ goog ” ,因此输出 4 。*///当然可以遍历字符串,在每个字符处,向左右两方查找字符,看其是否相等//下面递归地做一下#include#include using namespace std;int max_length;
2013-09-17 20:37:10
339
原创 输出1到最大的N位数
//非递归方法/*#includeusing namespace std;#define N 3void print( int a[] , int digit_len ) { int i = digit_len; while( i >= 0 ) { cout << a[ i ]; i --; } cout << endl;}int main() { int a
2013-09-17 19:06:03
238
原创 丑数
/*题目:我们把只包含因子 2 、 3 和 5 的数称作丑数( Ugly Number ) 。例如 6 、 8 都是丑数,但 14 不是,因为它包含因子 7 。习惯上我们把 1 当做是第一个丑数。求按从小到大的顺序的第 1500 个丑数。*/#includeusing namespace std;int a[ 1505 ];int getMin( int a , int b)
2013-09-17 18:29:48
241
原创 判断出栈顺序是否合法
/*题目:输入两个整数序列。其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序。为了简单起见,我们假设 push 序列的任意两个整数都是不相等的。比如输入的 push 序列是 1 、 2 、 3 、 4 、 5 ,那么 4 、 5 、 3 、 2 、 1 就有可能是一个 pop 系列。因为可以有如下的 push 和 pop 序列:push 1 , pu
2013-09-17 15:40:08
399
原创 横向、纵向递增的二维数组的查找
/*二维数组,横向纵向均递增,如何在其中查找s*/#includeusing namespace std;#define N 10#define M 10int main() { int a[ N ][ M ]; int i , j; for( i = 0 ; i < N ; i ++ ) { for( j = 0 ; j < M ; j ++ ) { cin >>
2013-09-16 22:25:29
316
原创 约瑟夫环
/*假设当前7个人围坐一起,其编号依次是 0、1、2、3、4、5、6,第i个人喊数字i+1。喊到m,即第m-1个人离开,然后重新开始喊。当前有7个人,其编号依次是:0、1、2、3、4、5、6编号为2的人离开,剩下6个人,重新编号。原来编号为3的人,先在编号为0,这时候6个人的编号是:4、5、*、0、1、2、3*表示该位置有人离开从上面7个人和6个人每个人的编号对应关系可以知道,如果
2013-09-16 16:13:34
250
原创 括弧匹配方式有几种?
/*四对括号可以有多少种匹配排列方式?比如两对括号可以有两种 : ( ) ()和( ( ))*/#includeusing namespace std;void dfs( int left , int right , int length , char str[] ) { if( right == length ) { //如果右括号数量等于n,那就意味着一种匹配模式找到了
2013-09-16 15:50:25
396
原创 求子集
#include using namespace std;int _sum;int n;int list[ 4 ] = { 1 , 2 , 5 , 10 };void dfs( int ans[] , int depth , int length , int cur_sum ){ if( depth == 4 ) { int i; if( length == 0 ) {
2013-09-16 08:54:54
225
原创 1、2、5、10分钱组合成n分钱
/*有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?*/#include using namespace std;int _sum;int n;int list[ 4 ] = { 1 , 2 , 5 , 10 };void dfs( int ans[] , int depth , int length , int cur_sum
2013-09-15 22:27:33
368
原创 递归地颠倒一个栈
#includeusing namespace std;void conv( int a[] , int depth , int max_depth ){ if( depth < max_depth ) { int i; int t = a[ depth ]; for( i = depth ; i > 0 ; i -- ) { a[ i ] = a[ i - 1];
2013-09-15 17:37:29
299
原创 判断5张牌是不是顺子
/*1. 扑克牌的顺子从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。2-10 为数字本身, A 为 1 , J 为 11 , Q 为 12 , K 为 13 ,而大小王可以看成任意数字。*///输入中,0代表大小王#include#includeusing namespace std;void init_list( int list[] ) {
2013-09-15 17:28:25
442
原创 数组中出现次数超过数组长度一半的数字
#include using namespace std;int deal( int a[] , int length ) { int i; int t_num; int t_time; if( length <= 0 ) { return -1; } if( length == 1 ) { return a[ 0 ]; } t_time = 1; t_num =
2013-09-15 17:22:12
216
原创 不守秩序的站队者
/*多人排成一个队列 , 我们认为从低到高是正确的序列 , 但是总有部分人不遵守秩序。如果说 , 前面的人比后面的人高 ( 两人身高一样认为是合适的 ),那么我们就认为这两个人是一对 “ 捣乱分子 ” , 比如说 , 现在存在一个序列 :176, 178, 180, 170, 171这些捣乱分子对为, , , , , ,那么 , 现在给出一个整型序列 , 请找出这些捣乱分子对的个数
2013-09-15 17:07:10
225
原创 括号匹配问题
/*判断if语句中的括号描述:编程的时候,if条件里面的"("、")"括号经常出现不匹配的情况导致编译不过,请编写程序检查输入一行if语句中的圆括号是否匹配正确,同时输出语句中出现的左括号数量和右括号数量。如if((a==1) && (b==1))是正确的,而if((a==1))&&(b==1))是错误的。备注:只检查圆括号合法性,不检查其他括号和语句本身语法合法性。另外,if语句最外层
2013-09-15 15:12:09
339
原创 组合数
/*编程求解:输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中 随意取几个数 ,使其和等于 m , 要求将其中所有的可能组合列出来 .*/#includeusing namespace std;void dfs( bool flag[] , const int depth , const int max_depth , const int sum , i
2013-09-15 13:00:29
236
原创 矩阵特殊运算
//给一个矩阵,其运算如下:如果对其中某一个元素加1,则上下左右相邻位置的某一个元素也要加1//判断一个矩阵是否可以由全0的矩阵运算出来//输入矩阵,指定相应的减法运算,就是矩阵某个位置减1,相邻某个位置也减1,看能否出现全0元素#include#includeusing namespace std;#define HEIGHT 4#define WIDTH 4int a
2013-09-15 11:27:12
277
原创 旋转数组的查找
#includeusing namespace std;int result;void _search( int list[] , int start , int end , int s ) { if( start <= end ) { int m = ( start + end ) / 2; if( list[ m ] == s ){ result = m; re
2013-09-14 22:04:40
193
原创 最长有序子序列
//这里实现一个严格的最长递减子序列。#includeusing namespace std;#define length 20int main() { //序列 int a[ length ]; //b[i]=j表示数组a中以第i个位置为尾的最长递减子序列的前一个元素在数组a中第j个位置 int b[ length ]; //c[i]=j表示数组a中以第i个位置为尾的最长
2013-09-14 21:58:38
210
原创 最大子矩阵
/************************************************************************//*第35题 最大子矩阵 *//********************************************************
2013-09-14 21:26:32
201
原创 镜像一棵BST
/*题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和非递归两种方法完成树的镜像转换。*///感觉随便一种遍历方式都可以做到#include#includetypedef struct node { int value; struct node * lchild , *rchild;} BT_node , *B
2013-09-14 21:00:55
233
原创 在升序数组中找和为n的两个数
//找到任意一对即可#include#includeusing namespace std;int main() { int a[ 100 ]; int i; int j; for( i = 0 ; i < 100 ; i ++ ) { a[ i ] = rand() % 100; } //排序 sort( a , a + 100 ); int n = rand()
2013-09-14 18:53:10
264
原创 输出单链表倒数第k个结点
//输出单链表倒数第k个结点struct int_List_Node{ int value; struct int_List_Node *next;};int count_back_k( const struct int_List_Node * L , const int k ) { struct int_List_Node *p = L; struct int_List_Nod
2013-09-14 18:43:42
290
原创 和为n连续正数序列
#includeusing namespace std;int main() { int n; int i; int length; scanf( "%d" , & n ); cout << n << endl; //序列的长度是length for( length = 2 ; ; length ++ ) { //序列中间那个数是mid int mid = n / le
2013-09-14 18:33:33
231
原创 平分糖果---2013阿里笔试题
/*有n个小朋友坐成一圈,每人有Ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1,求使所有人获得均等糖果的最小代价。假设当前n个小朋友手中的糖果数量是a[ 1 ] , a[ 2 ] , ...... , a[ n ]那么总共的糖果量是sum_ = a[ 1 ] + a[ 2 ] + ...... + a[ n ]平均值,即传苹果结束的时候每个人手中剩余苹果量是:a
2013-09-14 17:56:33
413
原创 求二叉树的节点的最大距离
#include using namespace std;typedef struct char_BT_Node{ char value; struct char_BT_Node *lchild; struct char_BT_Node *rchild;} char_BT_Node , *char_BT_Pointer;int max_dis;void Create_char
2013-09-13 21:13:19
229
原创 翻转句子中单词的顺序
//单词内部顺序不变,句子中单词的顺序翻转,标点同字符一样处理#includeusing namespace std;void convert( char *str , char *p1 , char *q1 ) { char *p = p1; char *q = q1; while( p <= q ) { char c = *p; *p = *q; *q = c;
2013-09-13 20:57:58
193
原创 判断一个序列是否是BST的后序遍历结果,假设没有重复元素
#includeusing namespace std;bool recur( int a[] , int start , int end ) { if( start <= end ) { int mid; int i = end - 1; bool flag = true; //从左向右,找到[start,end)区间第一个比a[end]大的元素 for( i = s
2013-09-13 20:18:50
240
原创 KMP
#includeusing namespace std;void get_next( char str2[] , int next[] , int length2 ) { int i , j; i = 0; j = -1; next[ 0 ] = -1; while( i < length2 ) { if( ( j == -1 ) || ( str2[ i ] == str2[
2013-09-13 14:39:06
202
原创 链表相交、有环无环、交点等
struct int_List_Node{ int value; struct int_List_Node *next;};//判断两个无环链表是否相交bool is_crossed( struct int_List_Node * head1 , struct int_List_Node * head2 ) { if( ( head1 == NULL ) || ( head2 ==
2013-09-13 13:59:33
242
原创 找出最小的k个数
#include#includeusing namespace std;#define all_num 20#define sel_num 5int main () { int list[ all_num ]; int i; for( i = 0 ; i < all_num ; i ++ ) { list[ i ] = rand() % 30; } for( i = 0
2013-09-13 12:56:58
266
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅