自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 题目1441:人见人爱 A ^ B

这里不能只用使用pow()函数,因为如果给的两个数很大的话,其结果根本是无法存储的,这里有一个技巧,求a^b的最后三位,只需将每次与a相乘的结果中保留最后三位即每次都对1000取余就行了,与更高位的数字是没有关系的。#include #include #include using namespace std;bool judge(int n){ int i;

2017-03-24 14:21:07 309

原创 题目1056:最大公约数

求最大公约数,使用欧几里得算法(辗转相除)即可#include using namespace std;int main(){ int a,b; while (cin >> a >> b) { while (a % b != 0) { int temp = a % b; a = b

2017-03-24 10:44:53 262

原创 根据中序和后序遍历序列求层序遍历序列

如题,顺便还求了一下树的高度。#include #include #include using namespace std;struct Node{ Node *lchild; Node *rchild; char c;};void preOrder(Node *T){ cout c; if (T->lchild != NULL)

2017-03-23 17:30:43 1086

原创 复旦机考之字符串匹配

使用string.find()可以暴力破解#include #include using namespace std;struct Node{ string m; string p;};int main(){ int n; cin >> n; Node str[100]; for (int i = 0;i < n;i++)

2017-03-23 13:47:09 458

原创 复旦机试之汉诺塔问题

经典的汉诺塔问题,我们在此基础上再在最后的输出结果中输出移动的是哪一片铜片。#include using namespace std;long long x;long long y;void move(char a,int n,char c){ x++; if (x > y-100) { cout " << c << ' ' << n <

2017-03-23 12:01:23 652

原创 题目1434:今年暑假不AC

使用贪心算法,每次选择结束时间最早的电视节目,可获得最优解#include #include using namespace std;struct Node{ int start; int end;};bool cmp(Node a,Node b){ if (a.end == b.end) return a.start < b.start;

2017-03-22 20:46:52 248

原创 二叉树遍历

2014年第三题根据题目要求,先建树,建好树之后进行遍历即可#include using namespace std;struct Node{ int val; Node *lchild; Node *rchild;};Node Tree[10000];int local;void preOrder(Node* T){ cou

2017-03-22 16:54:14 242

原创 题目1172:哈夫曼树

哈夫曼树的建立问题,建立哈夫曼树的过程很简单,每次在集合k中取出两个权制最小的点进行合并,并将合并之后的结果放入集合k中即可。因此问题的关键就在于怎样快速简便的从集合k中找出两个权值最小的结点。我们可以使用优先队列解决。priority_queue Q 建立一个int型的大顶堆,priority_queue,greater > Q 建立一个int型的小顶堆,每次取出或者加入元素时,堆会自动进行

2017-03-21 15:11:07 602

原创 题目1009:二叉搜索树

输入一个整数n,再给你一个序列s让你生成一个二叉排序树,接下来输入n个序列,判断这n个序列生成的二叉排序树是否和序列s生成的二叉排序树相同。这道题的思路是这样,我们首先应该根据给定序列建一个二叉排序树,判断两颗树相同的条件是它们的前序序列和中序序列/后序序列和中序序列相等。下面是此题的代码:#include #include using namespace std;struc

2017-03-21 12:34:49 498

原创 题目1078:二叉树遍历

此题涉及到二叉树的遍历以及二叉树的建立#include #include using namespace std;struct Node //定义树的结点{ Node *lchild; Node *rchild; char c;};Node Tree[50]; //结点数组string str1,str2;voi

2017-03-20 16:59:46 243

原创 图的最短路径算法

Dijstra:求单源最短路径,也就是某个点到其他所有点的最短路径#include #include using namespace std;struct Node //邻接链表中用来存放链表元素的结构体{ int next; int cost;};vector edge[101]; //二维数组,用邻接链表来存放边

2017-03-20 14:19:11 749

原创 题目1029:魔咒词典

不涉及算法,正确的输入和存储数据,然后进行查找即可。#include #include #include #include using namespace std;struct Item{ string word; string func;};int main(){ string s; int count; vector str;

2017-03-19 16:44:00 446

原创 题目1123:采药

十分典型的0 1背包问题,用动态规划思想进行解答,然而动态规划对数学不好的人来说是要命的,比如我这样的智障#include #include using namespace std;int max(int a,int b){ if (a > b) return a; else return b;}int main(){ int t,m; wh

2017-03-19 13:15:27 251

原创 前缀、中缀、后缀表达式归纳

后缀表达式求值:后缀表达式是无需进行处理可以直接被计算机处理的表达式,运算符通常位于操作数的后面,例如: 3 4 + 5 * 6 -   ,它是由中缀表达式(3 + 4) × 5 - 6转换过来的后缀表达式进行求值时,设立一个栈s1,从左到右依次访问表达式中的元素,如果遇到数字直接压入栈中,如果遇到运算符就将栈中最上方的两个元素取出后进行相应的运算,将运算结果压入栈中。具体c++代码如下:

2017-03-18 11:21:32 5022

原创 cin,scanf,gets,getline,getchar的一些区别和注意事项

cin:输入结束条件 :遇到Enter、Space、Tab键。scanf:scanf 读取字符串时,当遇到空格、回车和Tab键都会认为输入结束。gets:一般只用于读取字符串,gets可以接收空格,遇到回车认为输入结束getchar:getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab);注意,getchar函数只能接受单个字符,输入数字

2017-03-18 10:03:36 1330

原创 题目1017:还是畅通工程

可以很明显的看出,这是一道求最小生成树的问题,使用Kruskal算法和并查集的技巧,可以轻松解决。#include #include #include using namespace std;struct Node{ int vil1; int vil2; int cost;};bool cmp (Node a,Node b){ retu

2017-03-17 10:47:30 292

原创 题目1014:排名

这道题没有涉及到算法,只是数据存储和判断起来可能比较复杂需要注意的是对sort()函数的使用#include #include #include using namespace std;struct Node{ string id; int pass; int num[10]; int sum;};bool cmp(Node a,Node

2017-03-16 17:24:00 197

原创 题目1013:开门人和关门人

这道题没有涉及到算法的内容,是对基础知识的考查。刚开始时我就发现,这道题要在输入的过程中就进行比较,找到合适的输出,然后存储起来,而不能先输进去然后再集中判断,这样会很麻烦。但是我陷入了一个误区,我觉得要比较时间大小的话需要先把字符串类型的时间转换成整数进行比较,实际上不用,使用strcmp()函数就可以轻松完成。题中每个签到者有个ID,还有签到时间和签离时间,不妨用一个结构体将它们归在一起比

2017-03-16 15:30:44 524

原创 题目1012:畅通工程

这道题如果不用并查集感觉根本无从下手,可以将题目理解为:如果两点之间有路径,那么与他们连接的其他结点也就贯通了,即可以归属于同一个集合,关于并查集方法的叙述,有一篇博客讲的很好: http://blog.csdn.net/dellaserss/article/details/7724401/#include using namespace std;int Tree[1000];

2017-03-16 12:25:23 243

原创 题目1011:最大连续子序列

采用动态规划的思想,可以在一次遍历中完成解答。依次相加所有的元素,同时记录相加过程中的最大值,当cur的和小于0时,说明此时再加下去会拖累后面元素的后腿,遂舍弃之前的cur,从下一个元素开始重新相加。#include using namespace std;int main(){ int k; while (cin >> k && k != 0) {

2017-03-15 23:29:27 201

原创 题目1464:Hello World for U

Problem:Solution:#include #include using namespace std; int main(){ int n1,n2,n3; string s; while (cin >> s) { string s1; string s2; string s3;

2017-03-05 20:57:23 257

原创 题目1468:Sharing

Problem:Solution:题目的意思让我们找出以链表存储的单词的公用存储区,也就是找其公共后缀开始的地方。先要构建两个链表分别存储两个单词,由于两个单词的长度是不相等的,要使它们的末尾对齐,那么必然要先对长的单词进行遍历,直到长单词剩余部门和短单词等长,然后开始对比它们的地址,如果相等,那么从此处开始就是它们的公共存储区了。#include #include #in

2017-03-05 20:55:59 292

原创 题目1010:A + B

Problem:Solution:这道题的关键是要搞清楚题目中所蕴含的逻辑关系和运行顺序,没有什么有含金量的算法,具体详情看代码,需要注意的是两个加数的计算部分,由于输入即可以形如“six”也可以为“zero six”也可为“five six”,因此如何准确的根据输入情况得到加数就比较关键了#include #include using namespace std;

2017-03-03 10:55:39 299

原创 题目1185:特殊排序

Problem:Solution:比较简单的一道排序题,不知道这类题可不可以用sort()来做,不过我写的程序无法通过,会提示Wrong Answer,但我测试发现好像又没错,所以还是老老实实的写个冒泡吧#include #include #include #include using namespace std;int main(){ int n;

2017-03-02 16:39:31 293

原创 题目1183:守形数

Problem:Solution:比较简单的一道题,我用的方法是把这个数和它的平方转化为string类型然后从后往前进行比较。#include #include using namespace std;int main(){ int m; while(cin >> m) { int n = m * m; str

2017-03-02 15:45:39 311

原创 题目1180:对称矩阵

Problem:Solution:判断矩阵是否对称,申请一个二维数组来存放元素,然后判断各元素是否满足对称矩阵所需的条件即可,需要留意的是当二维数组作为形参进行传递时,在申明函数时参数需要以int[ ][10]这样的格式定义,也就是说第二个维度是不可以为空的。#include #include using namespace std;int main(){

2017-03-02 15:17:07 725

原创 题目1182:统计单词

Problem:Solution:这道题的思路其实是很简单的,但由于我对c++基本语法的不清楚导致耗费了很久。在用cin读取输入字符串时,遇到空白就会停止了,比如说输入为“hello world”读进去的只有“hello”,只能cin#include #include #include using namespace std;int main(){ stri

2017-03-02 13:44:00 276

原创 题目1181:遍历链表

Problem:Solution:题目要求很清楚,先建立一个链表,再对链表进行类似于冒泡的排序即可#include #include #include using namespace std;struct LNode{ int val; struct LNode *next;};int main(){ int n,m; LNod

2017-03-01 15:19:35 215

原创 520. Detect Capital

Problem:Solution:检查大写字母的使用是否合法。题中给出了三种合法的情况,我们只需拿给定的单词与这三种情况一一比较即可,不难。520未免让我这个挫逼不合格程序员遐想连篇,一段美妙的故事已经在脑海中构建完成class Solution {public: bool detectCapitalUse(string word) { int len

2017-02-27 14:45:11 222

原创 506. Relative Ranks

Problem:Solution:求所给整数数组中各元素的相对大小,最大的为“gold”,第二大为“silver”依次类推。我想到的办法是创建一个辅助数组ss,用来记录各元素的相对大小,然后遍历这个辅助数组将结果存放到string数组res中进行输出。这种方式的时间复杂度为O(n^2),空间复杂度为O(n)class Solution {public: vector

2017-02-27 13:52:42 265

原创 500. Keyboard Row

Problem:Solution:判断给定字符串数组中的单词能否有由且仅由某一排键盘上的字母构成。我想到的方法是依次拿每个单词和row1、row2、row3中的字母进行比较判断,循环要嵌套三次,最外层循环表示依次选取的单词,第二层循环表示依次选取的单词中的字母,最里层循环表示一个键盘行中的字母。其中第二层循环要写三个,表示分别和row1、row2、row3进行比较。这里要注意的一点

2017-02-26 17:22:52 266

原创 476. Number Complement

Problem:Solution:题目要求将给定整数的二进制码变反后,输出新的二进制码所代表的整数。我的策略是先利用除2取余法将所给正整数的二进制编码存放在一个字符串变量中,然后对该字符串进行遍历,采用二进制转十进制的方法将其转换为一个十进制数。需要注意的是代码中用到了求x的y次方的函数pox(x,y).class Solution {public: int fi

2017-02-26 14:47:08 314

原创 350. Intersection of Two Arrays II

Problem:Solution:在“349. Intersection of Two Arrays”问题的基础上稍作变动,349中不会显示重复元素,此题所有重复的交集元素都必须显示。只需先对两数组进行排序,剩下的工作就简单很多了,可以在O(n)时间内完成。class Solution {public: vector intersect(vector& nums1,

2017-02-26 13:43:06 184

原创 268. Missing Number

Problem:Solution:找出给定数组中缺失的那个数,数组中的各元素不重复,范围为0到n. 首先下可能会到的是比较暴力的时间复杂度为O(n^2)的方法,即对每个0到n的整数都在给定数组中搜索看有无和它相等的元素,如果有,则它就是丢失的那个整数,如果没有,那么n+1则为丢失的元素。class Solution {public: int missingNumber

2017-02-26 12:46:03 191

原创 206. Reverse Linked List

Problem:Solution:题目要求反转一个单链表,没有头结点的话稍微麻烦一点,需要两个辅助指针,一个指向已经完成反转的最后一个元素,开始时指向head,另一个用来暂存当前需要反转元素的下一个,以避免链表断链。这种方式类似于“头插法”,具体实施如下:/** * Definition for singly-linked list. * struct ListNode {

2017-02-26 10:51:50 204

原创 217. Contains Duplicate

Problem:Solution:可以使用暴力法,但是时间会超出限制class Solution {public: bool containsDuplicate(vector& nums) { int len = nums.size(); for (int i = 0;i < len;i++) {

2017-02-25 15:20:11 173

原创 409. Longest Palindrome

Problem:Solution:对于给定的字符串,找出由该字符串中所给字母组成的最长的回文串的长度。首先,统计各字符出现的次数,使用一个长度为'z'-'A'+1的数组即可,然后遍历整个数组,对于偶数个数的字符直接加以来,对于最多的奇数个数的字符直接加(构造回文串时放在中间),对于其余的奇数个数的字符先减1变为偶数个数再相加。class Solution {public:

2017-02-25 13:55:50 273

原创 242. Valid Anagram

Problem:Solution:题目的含义是判断t是否是由s颠倒字母顺序而构成的字,说白了就是判断字符串t和s中对应字符的个数是否相等,算法的核心思想是构建一个大小为26的整形数组,存储s与t中相应字符出现的次数,最后加以判断即可。class Solution {public: bool isAnagram(string s, string t) {

2017-02-25 12:55:18 149

原创 169. Majority Element

Problem:Solution:求给定数组中出现次数超过n/2的元素,首先想到的是暴力法,也就是说遍历数组对每个元素的出现次数进行统计,如果出现次数一旦大于n/2即返回该书,此方法的时间复杂度为O(n^2)class Solution {public: int majorityElement(vector& nums) { int len = num

2017-02-25 10:46:38 198

原创 100. Same Tree

Problem:Solution:判断两棵二叉树是否相等,显然采用递归方式比较简单,但递归方式往往又是晦涩难懂的。这道题的递归算是比较简单,首先我们要搞清楚可能的情况有哪些:1、如果当前访问的两个结点都为空,那显然他们是相等的;2、如果两个结点一个为空另一个不为空,那么显然不相等;3、如果两个结点都不为空但他们的value不行等,那他们也不相等;4、如果两个结点都不

2017-02-25 10:16:23 226

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除