C++题目汇总
文章平均质量分 51
Jeffery1982
这个作者很懒,什么都没留下…
展开
-
C++将字符串转换成数字
int changestr(char* str){ int len = strlen(str); int sum = 0; float carry = 1.0/10; for(int i=0; i其中sum为carry为当前位之前的值。str[len-1-i]-'0'是表示将字符的ascii码减去0的ascii码,最后出来的数字就是需要的数字。每次*10的话就把当前位往前移了。原创 2011-04-17 05:28:00 · 1157 阅读 · 0 评论 -
How to know 2 strings are anagram
bool anagram(char s1[], char s2[]){ int bit[256] = {0}; if(s1 == NULL || s2 == NULL) return false; int len = strlen(s1); int len2 = strlen(s2); if(len != len2) return false; for(int i = 0; i原创 2011-04-29 15:20:00 · 557 阅读 · 0 评论 -
Check if the string has unique char.
bool isChar(string str) {bool char_set[256];for (int i = 0; i The code is using additional space to store if the char is already contained in the string or not. 现在这段code和之前的remove duplicate char in a string其实是一样的。另外现在的这段code仅限于ascii,不适用于UTF。因为UTF可能是16位原创 2011-04-30 03:47:00 · 481 阅读 · 0 评论 -
取出linked list中间一个元素返回
<br />linka* FindCenterNode(linka* head){ linka* slow = head; linka* fast = head; fast = fast->next; while (fast!=NULL && fast!=slow) { fast = fast->next; if (fast!=NULL && fast!=slow) { slow = slow->next; fast = fast->next;原创 2011-04-30 08:04:00 · 1251 阅读 · 0 评论 -
Factorial
<br />其实这个单词大家都认识,就是指阶层的意思。换成中文大家就知道了。<br />算法的话也非常简单,用的是recursive的内容。<br />int factorial(int n){ if (n>1) { return n * factorial(n-1); } else { return 1; }} <br />当然也可以用没有recursive的方法来做:<br />int factorial_iter(int n){ int result原创 2011-04-30 14:14:00 · 434 阅读 · 0 评论 -
Fibonacci Sequence
<br />斐波那契数列,写法也应该不难,具体的算法就是从1开始,后面的数字永远是前面的两个数字之和。<br />int fibonacci(int n){ if (n<=1) return n; else return fibonacci(n-1) + fibonacci(n-2);} <br />如果不用递归的话,首先要判断n的几种特殊的情况,小于0,等于0和等于1,都是不同的处理情况。<br />因为n必须要从1开始,而且第一个和第二个元素都是1。<br />所以序列就成为原创 2011-04-30 14:24:00 · 455 阅读 · 0 评论 -
找出circular的linked list的第一个元素
再简单不过了,但是程序写好了,竟然运行不过去,挺奇怪的,出来的结果不是预料中的。十分让我意外。不知道哪里有问题了。#include using namespace std;typedef struct Node { char data; Node* next;} Node;bool createList(Node **head){ *head = NULL; return true;}void addNode(Node **head, char c){原创 2011-05-01 03:20:00 · 522 阅读 · 0 评论 -
C++中各种运算符的知识
<br />以下是各种不太常见的运算符,很多平时一般用不到,但是在写算法的时候却会被考到:<br /> <br />&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 <br /><br />其中,按位取反运算符是单目运算符,其余均为双目运算符。 <br /><br />位运算符的优先级从高到低,依次为~、&、^、|, <br /> <br /> (1)左移运算符( < <) <br /> 左移运算将一个位串信息向左移指定的位,右端空出的位用0补充。例如014 < <2,结原创 2011-05-03 02:06:00 · 924 阅读 · 0 评论 -
不用加号计算加法
<br />int add(int a, int b){ if(b==0) { return a; } if(a==0) { return b; } int sum=a^b; int temp = a&b; int carry = temp<<1; return add(sum, carry);} <br />用异或算出相加出来的各位(因为1和0相加才不会进位,所以用^异或符号,进位则是靠后面),然后用& 算出进位(当此位都为1时才会进位,所以用&原创 2011-05-03 02:23:00 · 2025 阅读 · 0 评论 -
不用临时变量将两个int数字交换
p=p+q;q=p-q;p=p-q;very tricky原创 2011-04-28 13:19:00 · 662 阅读 · 1 评论 -
另一道链表题目
有一个链表,它有next以及child属性,每一个child或者next指向的node也有相同的属性,现在问如何遍历所有的node。算法有几种option,第一种是用额外存储空间,另一种是no extra memory。还有一道题目是关于数组,就是有一个二维数组,每下面一行的数据都比上面一行的大,每右边一列的数据总是比左边一列的大。求给出一个N,如何定位到这个二维数组上。还有一个井字游戏的算法。也是相关于二维数组的。原创 2011-04-27 16:26:00 · 470 阅读 · 0 评论 -
反转字符串函数
char* RevertString(char * str){ int len; int i; len = strlen(str); char * ret = new char[strlen(str)]; for (i=len-1;i>=0;i--) { ret[len-i-1] = str[i]; } ret[len]=0; return ret;}写的当中出现了一点问题就是如果直接修改传进来的参数str的话,会出现一个voilation writin原创 2011-04-15 06:27:00 · 655 阅读 · 0 评论 -
再发一个转换数字的代码
void changestr(int *a,int *b){ int tmp; tmp = *a; *a=*b; *b=tmp;} 以上代码为c++的数字转换我加了一点注释,让每句代码理解起来更加深刻。原创 2011-04-18 15:00:00 · 473 阅读 · 0 评论 -
C++中经典的单向链表反转
struct linka {int data;linka* next;};void reverse(linka*& head) {if(head ==NULL) return;linka *pre, *cur, *ne;pre=head;cur=head->next;while(cur){ ne = cur->next; cur->next = pre; pre = cur; cur = ne;}head->next = N原创 2011-04-19 04:45:00 · 680 阅读 · 0 评论 -
char*的初始化
<br />void CharDifference(){ char * a = new char; char * b = new char[50]; cout << strlen(a)<<'/n'; cout << strlen(b)<<'/n'; for(int i=0;i<70;i++) { a[i]='a'; b[i]='b'; } cout << strlen(a)<<'/n'; cout << strlen(b)<<'/n';原创 2011-04-15 06:47:00 · 4484 阅读 · 0 评论 -
重拾C++指针(入门)
<br />void main(){int nNumber; int *pPointer;nNumber = 15;pPointer = &nNumber;cout<<"nNumber is equal to "<< nNumber<<endl;*pPointer = 25;cout<<"nNumber is equal to :"<<nNumber<<endl;} <br />发觉每次学C++指针,每次过阵子就忘记了,不知道是自己脑子不好使,还是指针太难了,一不用就忘记原创 2011-04-18 03:38:00 · 473 阅读 · 0 评论 -
二叉树的三种遍历
<br />struct Node{ int data; Node* lchild; Node* rchild;}void preorder(Node* parent){ if (parent!=NULL) { cout<<parent->data<<endl; preorder(parent->lchild); preorder(parent->rchild); }}void inorder(Node* parent){ if (p原创 2011-04-22 01:45:00 · 872 阅读 · 0 评论 -
将一个已经排序好的数组变成height最小的BinaryTree
<br />Node* CreateBinaryTree(int* arr, int leftIndex, int rightIndex){ if (rightIndex<leftIndex) { return NULL; } int currentIndex = (leftIndex + rightIndex) /2; Node* p = new Node(); p->data = arr[currentIndex]; p->lchild = CreateBinary原创 2011-04-22 04:38:00 · 505 阅读 · 0 评论 -
How do you remove the duplicate characters in a given string without using any additional buffer.
TODO原创 2011-04-28 13:03:00 · 752 阅读 · 1 评论 -
Write a method to replace all spaces in a string with ‘%20’.
exclusively for XU-bp75mklu3ja@checkout.google.com21.1 Write a method to replace all spaces in a string with ‘%20’. pg 60SOLUTIONSThe algorithm is as follows:1. Count the number of spaces during the first scan of the string.2. Parse the string ag原创 2011-05-08 02:35:00 · 1400 阅读 · 0 评论