c++
胖大海瘦西湖
乐观,积极进取
展开
-
C++捕获cin输入错误类型值的问题
#includeusing namespace std;int main(){ int temp; char cht[10]; char ch; /* //1 while(1){ cin>>temp; if(!cin.fail()){ //这个只接收数字(正或者负),如果出现非数字就提示重新输入,注意temp是int型的 cout<<temp<<endl; co原创 2016-07-15 21:49:58 · 5635 阅读 · 0 评论 -
最小堆
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇/* 说明: 1、堆数组的下标从0开始; 2、下标为i的父结点的下标为(i-1)/2,其子节点为2*i+1以及2*i+2; 3、最后一个叶子节点(下标为i-1)的父节点为(n-1-1)/2即n/2-1. */#include #include using namespace std;void M转载 2017-07-20 14:51:36 · 419 阅读 · 0 评论 -
全排列
/*#include #include using namespace std;vector vib;vector vires;void dfs(vector &vi,int ct){ if(ct>=vi.size()){ for(auto ieh: vires) cout<<ieh<<" "; cout<<endl;原创 2017-07-20 19:10:50 · 312 阅读 · 0 评论 -
二叉搜索树
#include #include using namespace std;typedef struct node{ int data; struct node* lchild; struct node* rchild;} Node,*pNode;void insert_sbt(pNode &T, int data){ if(T==NULL){原创 2017-07-18 14:23:17 · 173 阅读 · 0 评论 -
24点游戏
参考链接:速算24点上面的链接里的代码是不允许计算中出现小数,这也是题目的要求,所以,那个代码对于“5 5 5 1”这个组合是没法计算出正确结果的。我把程序改为能计算"5 5 5 1"之类的需要出现小数的情况,以及能输出相应的表达式,这里只输出一种可能的表达式。/*题目规定整个计算过程中都不能出现小数,所以下面的代码能过。但是对于5,5,5,1是不能得到正确结果的,原因在于这里用的原创 2017-07-19 10:09:09 · 370 阅读 · 0 评论 -
矩阵链乘法
#include #include using namespace std;void print(vector &vcname, vector> &virecord, int b, int e){//包含e if(b==e) cout<<vcname[b]; else{ /* cout<<"("; print(原创 2017-07-23 11:37:12 · 351 阅读 · 0 评论 -
插入排序及2种优化
原文:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void insertsort(vector &vi){ if(vi.size()<=1) return ; int n=vi.size(); for(int i=1;i<n;i++){ int转载 2017-07-20 00:45:36 · 281 阅读 · 0 评论 -
冒泡排序及2种优化方法
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include //#include //size_tusing namespace std;void bubble(vector &vi){ if(vi.size()==0) return ; int n=vi.size();//还是不要用size_t了,要不然,(s转载 2017-07-19 23:41:48 · 391 阅读 · 0 评论 -
shell排序及两种优化
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void shellsort(vector &vi){ if(vi.size()<=1) return ; int n=vi.size(); for(int step=n/2;step>0;step/=2){转载 2017-07-20 09:14:03 · 618 阅读 · 0 评论 -
BFPRT实现
这里自己实现了一下BFPRT算法,并与别人的实现版本进行效率对比,以及与C++标准库中的sort排序后选取top-k进行效率对比。发现,C语言版本的效率更高一些,在数据量不是海量数据时,sort的速度竟然比BFPRT要快。//// BFPRT.cpp// NowCoder//// Created by soybeanmilk on 2017/7/22.// Copyright原创 2017-07-22 16:52:33 · 394 阅读 · 0 评论 -
传递类的成员函数给thread
#include #include using namespace std;class love{public: void saylove(string name); static void sayloveyou();};void love::saylove(string name){ cout<<"I love "<<name<<"!"<<endl;}原创 2017-08-17 19:30:56 · 3109 阅读 · 1 评论 -
深入理解红黑树
对于红黑树的原理与算法,推荐大家看这个博客:红黑树(一)之 原理和算法详细介绍在这里,我想写一些自己的体会,在变色、旋转过程中,是如何使树满足红黑树的规则的。请结合上面那个博客阅读。插入情况1:插入情况2:插入情况3:删除的情况(4种):原创 2017-08-26 08:30:30 · 422 阅读 · 0 评论 -
继承、向上转型、向下转型时虚函数调用规则
#include using namespace std;class A{public: virtual void print(){ cout<<"virtual A print"<<endl; } void fun(){ cout<<"non-virtual A fun"<<endl; }};class B:publi原创 2017-09-01 11:58:32 · 855 阅读 · 0 评论 -
LRU算法 C++实现
整体思路:一个循环队列同时使用节点的计数来标记节点的新旧信息,如果有新节点加入时,就把最旧的节点清空,将新节点加入。具体画一下图比较好理解。#include #include #include #include using namespace std;static const int LEN = 5;int main(){ vector vires(LEN,-1);//原创 2017-09-01 09:15:11 · 2981 阅读 · 0 评论 -
CHECK_NOTNULL template
#include using namespace std;#define CHECK_NOTNULL(val) \ CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val))template T* CheckNotNull(const char* file, int line, const cha原创 2017-09-02 16:14:26 · 2291 阅读 · 0 评论 -
memcmp的问题
#include#includestruct A{ int a; char str[8]; int b;};struct B{ int a; char str[8]; short b; short c;};int main(){ //返回0,但是不一样。 A a1; B b1; memset(&a1,0,sizeof(a1)); a1.a=1; memcpy原创 2017-10-10 17:34:41 · 1793 阅读 · 0 评论 -
快速排序
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;int partition(vector &vi,int start,int end){//包含end int temp=vi[start]; while(start<end){ while(end>转载 2017-07-20 11:38:43 · 245 阅读 · 0 评论 -
归并排序
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void merge(vector &vi, int start, int mid, int end, vector &vitp){ int k=0;//注意:这个k每次调用merge时都从0开始 int i=sta转载 2017-07-20 10:39:54 · 339 阅读 · 0 评论 -
C++读取每行特定列的整数
输入文本如下:12345 23455 65477 3463423355 55456 56666 3566723445 63456 24566 2464524545 24545 24555 2345523455 24355 24356 24356代码如下:/*读取每行的第二个整形数值*/#include#includeusing namespace std;int ma原创 2016-09-09 00:02:00 · 1797 阅读 · 0 评论 -
ecvt()、fcvt()、gcvt()
#include#includeint main(){ char str[25]; double num,value; int sig=5,dec,sign; char *string; int ndig; num=-123.4567; value=num; printf("ecvt:\n"); nd原创 2016-10-10 09:23:26 · 656 阅读 · 0 评论 -
C++ 引用 交换数组元素
#includeusing namespace std;void swap(int &a,int &b){ a+=b; b=a-b; a=a-b;}void swap2(int a,int b){ int temp=a; a=b; b=temp;}int main(){ int list[5]={1,2,3,4,5}; int a=2;int b=2; swap(a,原创 2016-11-03 19:16:42 · 8467 阅读 · 0 评论 -
花生米(一)
原博客:花生米11082.花生米(一)时限:1000ms 内存限制:10000K 总时限:3000ms描述Tom和Jerry是邻居,他们都喜欢吃花生米。Tom的信条是“规则永远由强者制定,弱者只有遵守的权力”;Jerry则深信“头脑比拳头更有力量”。除此之外,他们都很聪明,恩,至少有211工程大学本科生水平。 五一长假第一天,Tom和Jerry在仓库散步的时候发现了一堆花生米转载 2016-10-21 08:59:08 · 595 阅读 · 0 评论 -
花生米(三)
原博客:花生米(三)花生米(三)时限:1000ms 内存限制:10000K 总时限:3000ms描述:五一长假第三天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(仓库,又见仓库……)。这次Tom制定分花生米规则如下:1、Tom和Jerry轮流从堆中取出k粒花生米吃掉;2、第一次取花生米的人只能取一粒,以后取花生米的数量不能超过前一个人取花生米数量的两倍;3、转载 2016-10-20 15:24:03 · 543 阅读 · 0 评论 -
花生米(四)
原博客:花生米41085.花生米(四)时限:1000ms 内存限制:10000K 总时限:3000ms描述五一长假第四天,Tom逛了N个bbs,做了N^2个脑筋急转弯题,终于发现了每次吃完花生米嘴里都是苦味的原因:自己总会吃到最后一粒花生米。 五一长假第五天,Tom和Jerry在仓库散步的时候发现了n堆花生米(这是什么仓库啊?!)。这次Tom制定分花生米规则如下: 1、首转载 2016-10-21 09:06:05 · 527 阅读 · 0 评论 -
花生米(五)
原博客:花生米5花生米(五)时限:1000ms 内存限制:10000K 总时限:3000ms描述:五一长假第六天,Tom在QQ上遇到了Kitty。呵呵,Kitty,在离散数学课上认识的PPMM……等等!Tom恍然大悟:自己这一生除了看帖不回之外最大的错误就是离散数学没学好! 五一长假第七天,Tom和Jerry在仓库散步的时候发现了一堆花生米(仓库,呵呵,仓库…)。这次Tom转载 2016-10-21 09:08:07 · 1162 阅读 · 0 评论 -
花生米(二)
NOJ 1083 花生米(二)时限:1000ms 内存限制:10000K 总时限:3000ms 描述:五一长假第二天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(这个仓库还真奇怪)。这次Tom制定分花生米规则如下: 1、Tom和Jerry轮流从堆中取出k粒花生米吃掉,k可以是1,5,10中的任意一个数字; 2、为显示规则的公平性,Jerry转载 2016-10-20 13:40:54 · 757 阅读 · 0 评论 -
矩阵乘法计算量估算
编写程序计算不同的计算顺序需要进行的乘法次数 输入描述:输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则输出描述:输出需要进行的乘法次数输入例子:350 1010 2020 5(A(BC))输出例子:3500//3 50 10 1原创 2017-06-22 00:05:23 · 2414 阅读 · 0 评论 -
成绩排序
题目描述查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter原创 2017-06-22 00:55:06 · 399 阅读 · 0 评论 -
C++ split函数
#include#include#includeusing namespace std;vector split(string s,char token){ istringstream iss(s); string word; vector vs; while(getline(iss,word,token)){ vs.push_back(w原创 2017-06-22 18:47:50 · 4138 阅读 · 0 评论 -
遍历一遍找到第一个出现一次的字符
题目描述找出字符串中第一个只出现一次的字符 输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1输入例子:asdfasdfo输出例子:o使用map记录字符出现的次数,使用vector记录只出现一次的元素及其次序,在删除重复的元素的同时保持先后次序,最终返回v原创 2017-06-22 13:48:14 · 593 阅读 · 0 评论 -
KMP算法思考
参考链接:KMP 算法(1):如何理解 KMP KMP算法详解//// kmp.cpp// algorithm//// Created by soybeanmilk on 2017/6/11.// Copyright © 2017年 soybeanmilk. All rights reserved.//#include #include using names原创 2017-06-12 00:49:58 · 285 阅读 · 0 评论 -
Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).You may assume that the intervals were initially sorted according to their start times.E原创 2017-06-27 16:32:18 · 286 阅读 · 0 评论 -
直接选择排序
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void directselectsort(vector &vi){ if(vi.size()<=1) return ; int n=vi.size(); for(int i=0;i<n-1;++i){//当选择转载 2017-07-20 10:38:07 · 237 阅读 · 0 评论 -
火车进站 一个入栈序列的所有出栈顺序
题目描述给定一个正整数N代表火车数量,0输入描述:有多组测试用例,每一组第一行输入一个正整数N(0输出描述:输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。输入例子:31 2 3输出例子:1 2 31 3 22 1 32 3 13 2 1#inclu原创 2017-06-21 19:40:52 · 3206 阅读 · 0 评论