
C/C++
文章平均质量分 75
Furney
人的一生中,最光辉的一天并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志那天。
展开
-
测试程序运行时间的方法
程序的性能好坏是由其运行时间和空间占用情况决定的,而运行时间是主要的指标。因此设计出新的算法时,根据时间复杂度确定新的算法和传统算法的优劣,此时需要在程序中添加代码段,测试程序运行时间。这里介绍两种测试程序运行时间的方法。法1:#include #include #include int main(){ int a[1000]; double duration; time_原创 2011-12-28 11:15:52 · 846 阅读 · 0 评论 -
第一个只出现一次的字符
利用哈希表的思想来解,首先设置一个数组保存字符串中每个字符出现的次数,第一趟遍历字符串计算出每个字符出现的次数,第二次遍历找出第一个只出现一次的字符。算法的时间复杂度为O(n)。char FirstAppearedChar(char *str){ if(str == NULL) // 数据合法性检验 return '\0'; unsigned int hashTable[256原创 2012-09-18 10:20:18 · 995 阅读 · 0 评论 -
连续子数组的最大和
问题描述:输入一个整数数组,数组中有正数也有负数,一个或连续的多个整数组成一个子数组,求所有子数组的和的最大值。求子数组的和的最大值,首先可以求出数组所有子数组的和,再逐一比较可以得到和的最大值。这是最直观易懂的一种解法。但是对一个长度为n的数组,总共有n(n+1)/2个子数组,计算所有子数组的和时间复杂度为O(n^2)。而当n较大时,这种算法是很难被用户接受的。对于数组(a1, a2,原创 2012-09-17 20:54:45 · 7260 阅读 · 2 评论 -
字符串的排列
描述:输入一个字符串,打印出该字符串字符的所有排列。比如给定字符串“abc”,即求字符’a‘,’b‘,’c’的全排列,结果应该是abc、acb、bac、bca、cba和cab总有六个。1、全排列的递归方法思路:对于这个问题,我们从结果来分析,以abc和acb为例可以看出,相当于以a为字符串首字符,再和b、c的全排列cb、cb连接构成。以此类推,可以确定以b、c为首字符的全排列。因此解决这个原创 2012-09-16 15:03:45 · 1296 阅读 · 0 评论 -
字符串转化为数字
将给定字符串转化为数字,如果结果为正较大返回2147483647,如果结果为负且较大返回-2147483648。字符串除包含数字外还包含空格及其他字符,因此需要对不是数字的字符进行处理。#include int isspace(int x){ if(x == ' '|| x == '\t' || x == '\n' || x == '\f' || x == '\b' || x原创 2012-09-15 14:29:35 · 993 阅读 · 0 评论 -
计算器程序
计算器程序,非递归实现#include #include #include #include #include #include #include #include using namespace std;void calculateAndOutput(char* str);int isspace(int x){ if(x == ' '|| x == '\t' ||原创 2012-09-15 14:47:06 · 1280 阅读 · 0 评论 -
宏定义打印Hello World
#include "stdio.h"void print(){ *}void main(){}在*号处加一段代码,显示出"hello,world".分析:c++程序运行的入口函数是main(),因此要想办法在*处增加的代码中调用到main()函数。在c++中宏定义可以实现代码的替换,因此从宏定义入手可以解决这个问题。为了实现main()函数的运行,需要将main作替原创 2012-10-05 15:47:54 · 1655 阅读 · 0 评论 -
字符串循环移动
字符串循环移位一直是字符串操作的常见问题,最直观的解决方法是每次将字符串中的元素移动一位,循环k次。这个算法虽然可以实现字符串的循环移位,但是算法的时间复杂度为O(k*n),其中n为字符串的长度,k为循环移位的位数。为了降低时间复杂度,通过对移位过程的详细分析发现,可以利用中间变量tmp保存str[0, k - 1],再将str[n - k, n - 1]依次放入str[0, k - 1],最后将原创 2012-02-16 19:31:37 · 2991 阅读 · 3 评论 -
获取网卡信息
在Windows中获取网络适配器相关信息是很方便的,可以通过GetAdaptersInfo函数获取并保存在IP_ADAPTER_INFO结构体中,再对结构休进行解析得到适配器信息。有关函数和结构体的详细说明可以参考MSDN,这里就不再复述。下面直接给出具体示例程序。//引入头文件#include #include #include #pragma comment(lib, "Iph原创 2012-03-19 22:12:26 · 2088 阅读 · 0 评论 -
删除字符串中首次出现的指定字符
字符串处理中有一个非常常用的操作:删除字符串中首次出现的指定字符。对于这个操作,一般的方法是自己写函数实现,其实C++ string库中提供的函数就可以直接实现这个功能。需要的两个函数如下:1、find_first_of #include size_type find_first_of( const string &str, size_type index = 0 ); si原创 2012-03-16 10:11:50 · 2328 阅读 · 0 评论 -
Why C++ ? 王者归来
因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++, C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C转载 2012-02-16 15:12:03 · 951 阅读 · 0 评论 -
ACM小技巧
1.一般用C语言节约空间,要用C++库函数或STL时才用C++;cout、cin和printf、scanf最好不要混用。大数据输入输出时最好不要用cin、cout,防止超时。2.有时候int型不够用,可以用long long或__int64型(两个下划线__)。值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(转载 2012-02-08 20:14:29 · 947 阅读 · 0 评论 -
POJ 1001 求高精度幂
题目描述:对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 现在要你解决的问题是:对一个实数R( 0.0 n),其中n 是整数并且 0 解题思路:很简单的一道高精度题目。话不多说直接上代码,过程被写得复杂啦,有很大的改进空间。#include #include using namespace std;string m原创 2012-01-13 06:02:40 · 2578 阅读 · 0 评论 -
POJ 1488 TEX Quotes
题目描述信息较多,但是仔细读完会发现本题所要完成的功能是并不像描述得那么吓人,只是实现给定字符串中指定字符的替换。直接使用string类提供的find_first_of及replace函数就可以解题,具体实现代码如下:#include #include using namespace std;int main(){ string str; int count = 1; whil原创 2012-01-13 06:20:40 · 1393 阅读 · 0 评论 -
打印素数的各种算法
以前在网上看过一段这么描述素数的话说数论的研究对象归根到底是对素数的研究,因此如何高效地判断一个数是否是素数或者快速打印出一定范围内的素数的重要性不言而喻。下面我们来看一下几种关于素数判别的算法。1、素数判定朴素算法素数是这样一类特殊的数:它的因子只有1和它本身。由此我们可以得一种最为简单的判断一个数是否为素数的算法:对于某个数n,使2至n的开根作为除数,如果这些除数都不能整除n,则说明n原创 2012-01-11 22:12:55 · 4478 阅读 · 3 评论 -
字符串模式匹配
模式匹配又称为子串的定位操作,是串最基本的操作。下面对常用的模式匹配算法作简单介绍。1、朴素模式匹配算法 此算法是最简单的匹配算法,算法思想如下:从主串s的第1个字符起和模式串t的第1个字符比较,如果相等,则继续比较后继字符。否则从主串的下一个字符起再重新和模式串的第1个字符进行比较,直到模式串t中的每一个字符依次和主串s中的一个字符序列相等则匹配成功,返回和模式串t中第1个字符相等的字符原创 2012-01-10 16:01:20 · 3350 阅读 · 0 评论 -
POJ 2406 Power Strings
题目描述:给出一个字符串s,求该字符串最多是由多少个重复字符串连接而成。分析:KMP算法每次求得的next值就是当前到i为止的前子串与后字符串相等的子串的长度。#include#includeint main(){ int i, j, len; char str[1000005]; int next[1000005]; while(scanf("%原创 2012-01-11 17:02:28 · 754 阅读 · 0 评论 -
高精度计算
由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算。实现高精度数值计算,虽然不能利用编程语言提供的基本数值数据类型,但是可以利用字符串存储高精度数,计算的结果同样保存在字符串中,将高精度数运算转化为字符串运算。以下列举出高精度数相关运算。1.大数加法/* * 高精度数 * 结果存储在字符串a中,字符串a初始原创 2011-12-30 16:09:21 · 3911 阅读 · 3 评论