求1+2+...+n
摘要:本来这个题目没有可说的,但却要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C),那么一般的方法,或者递归之类的解法都不行,因为不是要用么循环就是要用到if. 首先,想到用math函数来做,除法可以通过右移来实现,(n*n+n)/2,平方可以用pow(n,2) 另一种方法可以通过类来实现,只要定义两个静态成员变量,每次构造一个对像的时候,构造函数将两变量进行运算,最终得到想要的解#include<iostream>#include<cmath>int Sum(int n);class SumClass{ p
阅读全文
posted @
2012-09-27 15:32
CodeAnt
阅读(190)
推荐(0)
设计包含min函数的栈,要求复杂度为o(1)
摘要:c++的标准模版一直没有仔细看过,今天用到了set、vector,比写一个c函数要方便许多 set是集合,关键的一个操作set::insert(),如果当前key不在set中,则加入,可以方便生成一个无重复值的集合 vector可以实现栈的操作,vector::back()返回最后的一个元素,与*(vector::end()-1)相同,*vector::begin()是最初的那个元素;vector::push_back和pop_back()分别入栈和出栈 借助vector,实现一个辅助栈,当Stack每push一个key时,辅助栈就将当前值与栈顶元素指向的值比较,如果小于它,刚辅助栈...
阅读全文
posted @
2012-09-25 14:40
CodeAnt
阅读(287)
推荐(0)
两个字符串的公共部分的长度
摘要:《编程珠讥》中comlen返回两个参数字符串中的共同部分的长度,代码如下:int comlen_error(char *p,char *q){ int i=0; while(*p && *p++==*q++) i++; return i;} 这段小代码显然有错,如果两个字符串第一个字符不相等的话,循环就不执行下去了。 重写了一个没有效率的代码,大体思路是:假设p比q要长,找出q中所有的子串,(q[i,j]包含了所有子串),然后判断子串是否在p中; 记得算法导论上,最大公共子序列是用动态规划实现的,现在都已经忘掉了...int comlen(char *p,...
阅读全文
posted @
2012-09-24 20:09
CodeAnt
阅读(338)
推荐(0)