摘要: 为什么多线程? 多线程并不一定是最好的,合适才是最好的。 多线程主要的优点是价廉物美,启动快、退出快、与其他线程共享核心对象,很容易实现共产主义的伟大梦想。但是其又有不可预期、测试困难的缺点。 使用好多线程,就是要知道何时应该用多线程,何时不该用。如果应该用多线程,如何解决Race Conditio 阅读全文
posted @ 2016-04-12 21:02 jonathan321 阅读(1220) 评论(0) 推荐(2)
摘要: #include #include using namespace std;int main(){ vector p; int x; while (cin>>x) { p.push_back(x); } int p_size=p.size(); ... 阅读全文
posted @ 2014-04-20 15:53 jonathan321 阅读(1261) 评论(0) 推荐(0)
摘要: 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M…… AN-1A0A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方... 阅读全文
posted @ 2014-04-20 14:15 jonathan321 阅读(160) 评论(0) 推荐(0)
摘要: 利用分治算法的Merge算法,算法的复杂度应该是merge算法的一半,虽然leetcode显示Accepted,但是时间复杂度应该没有满足。时间复杂度为:O((n+m)/2) 1 class Solution { 2 public: 3 double findMedianSortedArrays(int A[], int m, int B[], int n) { 4 int a=0,b=0,temp=0; 5 if((m+n)%2==1) 6 { 7 while((a+b)=n)10 ... 阅读全文
posted @ 2014-04-12 11:14 jonathan321 阅读(206) 评论(0) 推荐(0)
摘要: 卡拉兹(Callatz)猜想:对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。输出格 阅读全文
posted @ 2014-04-02 14:39 jonathan321 阅读(100) 评论(0) 推荐(0)
摘要: stdio.h:标准I/O库 scanf():格式化输入函数,它从标准输入设备(键盘) 读取输入的信息,其关键字最末一个字母f即为“格式”(format)之意。 函数原型:int scanf( const char *format, ... ); 调用格式为: scanf("<格式化字符串>",<地址表>); 返回值:scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。 printf(): gets():从stdio流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作 阅读全文
posted @ 2013-05-28 10:48 jonathan321 阅读(174) 评论(0) 推荐(0)
摘要: 迷途(stray)指针,也被称为野(wild)指针或悬浮(dangling)指针,是指将delete 用于指针(从而释放它指向的内存),但没有将它设置为空时引发。如果随后你在没有重新赋值的情况下使用该指针,后果将是不可预料的:程序崩溃算你走运。指针指向堆空间,delete之后,只是回收内存。并不改变指针的值。再删除一个指针之后,一定要将其赋值为空。虽然使用空指针是非法的,容易使程序崩溃,但是我们宁愿使程序崩溃也不远使程序调试起来很困难。如下例:#include <iostream>using namespace std;int main(){ int *p=new int; *p= 阅读全文
posted @ 2013-03-26 19:39 jonathan321 阅读(204) 评论(0) 推荐(0)
摘要: 参数传递的三种方式:按值传递:在调用函数传递参数时,编译器会自动在栈中创建该参数的拷贝,然后将此拷贝传递给被调用函数,故对被调用函数的参数改变只是改变了拷贝,而无法改变主调函数的参数本身的值。按址传递:在调用函数传递参数时,传递参数的地址,这样指针寻址之后修改的也就是参数本神的值。按别名传递:在调用函数传递参数时,传递参数的别名,这样对别名的修改也是对参数本身的修改。按值传递:#include <iostream>using namespace std;void swap(int a,int b){ int c; cout<<"swap函数中,交换前,a:&q 阅读全文
posted @ 2013-03-26 19:38 jonathan321 阅读(1544) 评论(0) 推荐(0)