C++
文章平均质量分 64
cfcf0517
这个作者很懒,什么都没留下…
展开
-
面试题15:链表中倒数第k个结点
/*面试题15 题目:输入一个链表,输出该链表中的倒数第k个结点。本题从1开始计数,即链表的尾点是倒数第1个结点。 常规思路:遍历一次链表得到结点数n,再从头开始的第n-k+1个结点就是倒数第k个结点。也就是遍历两次链表。 一次遍历的方法:设置两个指针。第一个指针从头开始向前走k-1步,从第k步开始第二个指针也从头开始遍历。当第一个指针 到达尾结点时,第二个指针正好是倒数第k个结点原创 2015-06-30 22:02:05 · 365 阅读 · 0 评论 -
Pop Sequence
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of t原创 2015-04-01 20:52:21 · 419 阅读 · 0 评论 -
Spell It Right
Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.Input Specification:Each input file contains one test case.原创 2015-04-03 21:56:04 · 390 阅读 · 0 评论 -
Reversing Linked List
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K原创 2015-04-01 10:38:14 · 267 阅读 · 0 评论 -
Sign In and Sign Out
时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueAt the beginning of every day, the first person who signs in the computer ro原创 2015-04-03 22:25:03 · 653 阅读 · 0 评论 -
A+B for Polynomials
InputEach input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero term原创 2015-04-02 12:04:20 · 656 阅读 · 0 评论 -
A+B format
Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).InputEach input file cont原创 2015-04-01 21:27:46 · 3250 阅读 · 0 评论 -
大数加法
题目描述 求两个非负整数(1000位以内)的和。输入 两个非负整数(1000位以内),以空格分隔。输出 两个非负整数的和。样例输入 111111111111 222222222222 样例输出 333333333333#include#includeusing namespace std;void Sum原创 2015-03-31 10:37:57 · 398 阅读 · 0 评论 -
面试题7:用两个栈实现队列
/*面试题7 题目:用两个栈实现队列。队列的声明如下,是在在队列尾部插入结点和在队列头部删除结点的功能。*/template class CQueue{ public:CQueue(void);~CQueue(void);void appendTail(const T& node);T deleteHead(); private:stack stac原创 2015-03-03 09:04:47 · 590 阅读 · 0 评论 -
面试题6:重建二叉树
/*面试题6 题目:输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。不包含重复数字。 前序遍历的第一个结果就是根节点,中序遍历中根节点前面的节点就是左子树,后面的节点就是右子树。然后递归的构建左右子树。*/BinaryTreeNode* ConstructBinaryNode(int* startPreorder,int* endPreorder,int* startI原创 2015-02-27 13:16:12 · 350 阅读 · 0 评论 -
1008.Elevator
The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It costs 6 sec原创 2015-04-04 19:37:50 · 355 阅读 · 0 评论 -
1009. Product of Polynomials
This time, you are supposed to find A*B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, and each line contains the inf原创 2015-04-04 21:45:18 · 311 阅读 · 0 评论 -
面试题17:合并两个排序链表
/*面试题17 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是递增排序的。 struct ListNode { int m_nValue; ListNode* m_pNext; }; 可能出现的错误:一是合并过程链表出现断裂或没有做到递增排序,二是特殊的输入就会崩溃。 */ListNode* Merge(ListNode* pHead1,List原创 2015-07-01 14:42:09 · 340 阅读 · 0 评论 -
面试题16:反转链表
/*面试题16 题目:定义一个函数,输入链表的头结点,反转该链表并输出反正链表的头结点。链表定义如下: struct ListNode { int m_nValue; ListNode* m_pNext; }; 仔细分析题目,为了避免链表发生断裂,需要定义三个指针,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。 经常出现的3中错误: 输入NULL或链表只有原创 2015-07-01 14:36:21 · 351 阅读 · 0 评论 -
面试题14:调整数组顺序是奇数位于偶数前面
/*面试题14 题目:输入一个整数数组,实现一个函数来调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于 数组的后半部分。 简单的思路是:扫描数组,碰到一个偶数,拿出来,把数组后面的数字向前移动,数组末尾出现一个空位,把这个偶数放 入空位。每碰到一个偶数需要移动O(n)个数字,因而总的时间复杂度是O(n*n)。 思路二:可以维护两个指针,一个指向数组的第一个,向原创 2015-06-29 21:32:02 · 289 阅读 · 0 评论 -
面试题13:在O(1)时间删除链表结点
/*面试题13 题目:给定单向链表的头指针和一个指针结点,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下: struct ListNode { int m_nValue; ListNode* m_pNext; }; void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted); 常规的做法是从头原创 2015-06-28 22:21:16 · 285 阅读 · 0 评论 -
面试题12:打印1到最大的n位数
/*面试题12 题目:输入数字n,按顺序打印从1到最大的n位十进制数。比如输入2,输出1,2...到最大的2位数99. 常用的方法是用字符串或数组表示一个大数。 把字符串中的每个数字初始化为‘0’,每次为字符串表示的数字加1,再打印出来。因而需要:在字符串表达的数字上模拟加法,再就是打印表达的数字。*/void Print1ToMaxOfNdigits(int n){原创 2015-06-26 19:21:07 · 411 阅读 · 0 评论 -
面试题11:数值的整数次方
/* 面试题11 题目:实现函数double Power(double base,int exponent),求base的exponent次方。不使用库函数,不考虑大数问题。 需要考虑的是当输入的指数(exponent)为0或负数的情况。*/bool g_InvalidInput=false;//采用全局变量来标识是否出错double Power(double bas原创 2015-06-26 16:10:07 · 260 阅读 · 0 评论 -
面试题10 二进制中1的个数
/*面试题10 特殊的情况是右移运算,m>>n。如果数字是一个无符号数值,用0填补最左边的n位。如果是有符号数值,用数字的符号位填补最左边的n位。 左移m<<n直接补0 题目:实现一个函数,输入一个整数,输出该数中二进制表示中1的个数。 整数右移移位和除以2是等价的,但除法的效率比移位运算低得多。 常规解法是:将n与1做与运算,判断最低位是否为1.接着将1左移移位得到2,再和n原创 2015-05-28 08:33:09 · 400 阅读 · 0 评论 -
面试题9 斐波那契数列
/*面试题9 题目:写一个函数,输入n,求斐波那契数列的第n项。 很多教科书中的解法:long long Fibonacci_Solution1(unsigned int n){ if(n <= 0) return 0; if(n == 1) return 1; return Fibonacci_Solution1(n - 1)原创 2015-05-28 08:29:57 · 542 阅读 · 0 评论 -
面试题8 旋转数组的最小数字
/*在面试中信手写出二分查找的循环和递归代码。 在排序的数组中查找一个数字或者某个数字出现的次数,都可以尝试使用二分查找算法。 能够从额外空间消耗、平均时间复杂度和最差时间复杂度比较插入排序、冒泡排序、归并排序、快速排序等不同算法的优劣。 写出快速排序的代码是很多公司的喜好要求。 面试题8 题目:把一个数组最开始的若干元素搬到数组的末尾,我们称之为旋转数组。输原创 2015-05-27 16:42:18 · 390 阅读 · 0 评论 -
面试题5:从尾到头打印链表
/*面试题5: 题目:输入一个链表的头结点,从尾到头打印出每个节点的值。 遍历的顺序从头到尾,打印的顺序从尾到头,这是一个典型的“先进后出”,可以用栈实现这种顺序。*/void PrintListReversingly(ListNode* pHead){stack nodes;ListNode* pNode = pHead;while(pNode != NULL原创 2015-02-25 11:44:37 · 568 阅读 · 0 评论 -
C++ Primer(重载操作符与转换)
第14章 重载操作符与转换14.1重载操作符的定义重载操作符具有返回类型和形参表。重载操作符的形参数目(包括成员函数的隐式 this 指针)与操作符的操作数数目相同。函数调用操作符可以接受任意数目的操作数。1.重载的操作符名+-*/%^&|~!=原创 2015-01-04 10:30:03 · 453 阅读 · 0 评论 -
C++ Primer(顺序容器 下)
第九章 顺序容器9.6再谈string类型表9-12 普通的string操作string s;定义一个新的空string对象,命名为sstring s(cp);定义一个新的string对象,用cp所指向的(以空字符null结束的)C风格字符串初始化该对象string s(s2);原创 2014-12-24 16:18:22 · 463 阅读 · 0 评论 -
C++ Primer(面向对象编程 二)
C++ Primer(面向对象编程 二)15.5 继承情况下的类作用域1.每个类都保持着自己的作用域,在该作用域中定义了成员的名字。在继承情况下,派生类的作用域嵌套在基类作用域中。如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义。2.名字冲突与继承:与基类成员同名的派生类成员将屏蔽对基类成员的直接访问。使用作用域操作符访问被屏蔽成员。struc原创 2015-01-13 20:55:29 · 352 阅读 · 0 评论 -
C++学习笔记十六-模板和泛型编程(一)
模板和泛型编程一 、模板定义1.定义函数模板:a. 模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。 模板形参表不能为空。b.模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明,类型形参跟在关键字 class 或 typename 之原创 2015-01-14 13:50:24 · 624 阅读 · 0 评论 -
C++ Primer(关联容器)
第十章 关联容器原创 2014-12-25 09:03:27 · 431 阅读 · 0 评论 -
C++ Primer(顺序容器 上)
第九章 顺序容器标准库定义了三种顺序容器类型:vector、list 和 deque。标准库还提供了三种容器适配器(adaptors): stack, queue, priority_queue9.1顺序容器的定义:#include vector svec; #include list ilist; #incl原创 2014-12-24 12:57:38 · 542 阅读 · 1 评论 -
C++ Primer(标准IO库)
第八章 标准IO库8.1面向对象的标准库1. #include #include // 从iostream继承#include // 从iostream继承2. 国际字符支持char有相应的wchar_twostream wistream wiostream wifstream wofstream wfstr原创 2014-12-23 14:11:05 · 384 阅读 · 0 评论 -
C++ Primer(函数)
函数1.递归求公约数int regcd(int v1,int v2){if(v2!=0)return regcd(v2,v1%v2);return v1;}原创 2014-12-22 12:30:32 · 371 阅读 · 0 评论 -
C++ Primer(语句)
第六章 语句1. 每个case不一定非要另起一行case 1: case 2: case 3: case 4: case 5: ++i; break;case值必须是整型常量表达式有两个case标号的值相同则编译错良好的程序要定义default: 即使没有什么要做的,;空语句也行 switch内部的变量定义:规定只能原创 2014-12-20 10:30:00 · 314 阅读 · 0 评论 -
C++ Primer(表达式)
1.算术操作符整除(/)与求余(%)运算21%-5; //result is 1 or -421/-5; //result is -4 or -52.关系操作符和逻辑操作符逻辑与和逻辑或总是先计算左操作数,再计算右操作数。if(iif(val==1) //当val等于指定的1值是,条件才成立if(val) //val为任意非零值,条件判断都成立c原创 2014-12-19 09:32:58 · 436 阅读 · 0 评论 -
C++学习笔记十六-模板和泛型编程(二)
C++学习笔记十六-模板和泛型编程(二)16.4 类模板成员1.模板作用域中模板类型的引用: 通常,当使用类模板的名字的时候,必须指定模板形参。这一规则有个例外:在类本身的作用域内部,可以使用类模板的非限定名。例如,在默认构造函数和复制构造函数的声明中,名字 Queue 是 Queue 缩写表示。实质上,编译器推断,当我们引用类的名字时,引用的是同一版本。因此,复制构造函数定原创 2015-01-15 12:57:54 · 492 阅读 · 0 评论 -
C++ Primer 关联容器--容器的综合应用:文本查询程序
//TextQuery.h #ifndef _TEXTQUERY_H_ #define _TEXTQUERY_H_ #include #include #include #include #include #include class TextQuery{ public: typedef std:原创 2014-12-28 12:26:34 · 337 阅读 · 0 评论 -
面试题1:赋值运算符函数
/*面试题1为如下CMySting的声明,添加赋值运算符函数。*/class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const原创 2015-02-22 21:54:10 · 616 阅读 · 0 评论 -
面试题4:替换空格
/*面试题4:实现一个函数,把字符串中的空格替换成“20%”。从前向后移动时,假如字符串的长度为n。对于每个空格字符,需要移动后面O(n)个字符,对含有O(n)个空格字符的字符串而言总的时间效率是O(n*n)。从后向前移动时,所有的字符只需要复制一次,时间效率为O(n)。*/void ReplaceBlank(char string[], int length){if(st原创 2015-02-22 21:55:38 · 375 阅读 · 0 评论 -
面试题3:二维数组的查找
/*面试题3题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。编写一个函数,输入一个这样的二维数组和一个整数,判断数组中是否含有该函数。总结如下的查找规律:首先选取数组中右上角的数字。相等则查找过程结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。*/bool Find(int* m原创 2015-02-22 21:55:09 · 443 阅读 · 0 评论 -
C++ Primer(复制控制)
第13章 复制控制复制构造函数、赋值操作符和析构函数总称为复制控制。编译器自动实现这些操作,但类也可定义自己的版本。有一种特别常见的情况需要类定义自己的复制控制成员的:类具有指针成员。13.1 复制构造函数只有单个形参,而且该形参是对本类类型对象的引用(常用 const 修饰),这样的构造函数称为复制构造函数。与默认构造函数一样,复制构造函数可由编译器隐式调用。复制构造函数可用原创 2014-12-31 13:35:55 · 362 阅读 · 0 评论 -
C++ Primer(标准库类型)
using声明和标准库string类型1.命名空间的using声明 using namespace::name 头文件声明 #include using std::string;2.读入未知数目的string对象while (cin>>word) cout 读取整行文本string line;while(原创 2014-12-13 09:18:59 · 409 阅读 · 0 评论 -
C++ Primer(数组与指针)
数组与指针 与vertor类型相比,数组的显著缺陷在于:数组的长度是固定的,没有获取其容量大小的size操作,也不提供push_back操作在其中自动添加元素。更改长度只能创建一个更大的数组。指针则可以像迭代器一样用于遍历和检查数组中的元素。 现在C++程序应尽量使用vector和迭代器类型,避免使用低级的数组和指针。程序只有在强调速度时才在类实现的内部使用数组和指针。1.原创 2014-12-15 10:16:48 · 401 阅读 · 0 评论