摘要:
#include <stdio.h>#include <stdlib.h>#include <memory.h>#define MAX 6void DFS(int *output, int val, int pos, bool *isSelected, int &k){int i = 0;if ( isSelected[val] ){return;}output[pos] = val;isSelected[val] = true;if ( pos == (MAX - 2) ){for (i = 0; i < MAX - 1; i++){prin 阅读全文
摘要:
问题描述:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。#include <stdio.h>#include <string.h>#define N 10int Find_len(char a[], int &max_len);int Symmetry(char a[], int low, int high);int main(){char a[] = "abcdlgooogle";int start_pos = 0;int max_len 阅读全文
摘要:
1. 简述 设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。求解方法1:voidRightShift(char*arr,intN,intk){ k= k % K;while(k--){chart=arr[N-1];for(inti=N-1;i>0;i--)arr[i]=arr[i-1];arr[0]=t;}}求解方法2:#include <stdio.h>#define N 10void Loop_Shifting(int a[], int n, int k);void Reverse(int a[], int low, 阅读全文
摘要:
Fibonacci数列: 描述了动物繁殖数量、植物花序变化等自然规律。作为一个经典的数学问题,Fibonacci数列常作为例子出现在程序设计、数据结构与算法等多个相关学科中。 1.递归法。大多数教材在讲解递归算法时总喜欢以Fibonacci数列为例,这是因为我们可以直观地从定义公式的第三行看出Fibonacci数列的递归性。其C++实现如下:unsigned long Fib(int n){ if (n <= 1) { return n; } else { return Fib(n - 1) + Fib(n - 2); }} 递归算法与定义公式... 阅读全文
摘要:
1. 简述 给定一个源区间[x,y] (y>=x)和N个无序目标区间[x1,y1][x2,y2][x3,y3]...[xn][yn],判断[x,y]是否在目标区间内。2. 思路 这个比较简单,合并目标区间,判断源区间是否在目标区间内即可。具体过程如下:第一步,先把目标区间排序。 第二步,从第一个区间开始,遍历首先找到一个[xi,yi],使得 x[i]<= X <= y[i],如果找不到,说明不在目标区间内,如果找到了并且yi>=y,那么结束工作,源区间在目标区间内,如果找到了,但是yi<y,那么还需要继续遍历,进入第三步。 第三步,继续遍历[xi,yi],如果xi 阅读全文
摘要:
1. 简述 给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD,s2=ACBD,返回false。2. 思路 将问题转化为:判断s1s1中是否包含s2子串。即对于s1=AABCD和s2=CDAA,判断AABCDAABCD中是否存在AA。 使用KMP匹配就行,对于s1s1也不用特地去开辟空间,假设s1的字符串指针为str,长度为len_str,只需len_str += len_str和str[i%len_str]即可。3. 参考资料 编程之美,3.1节,字符串移位包含的问题自己的方法如下:#i 阅读全文
摘要:
1. 数组a[100]里面存了数字1-99,还有一个数字是1-99里面的一个,也就是说a[100]里面有一个重复的数字请你把它找出来!方法1.#include <stdio.h>#include <stdlib.h>int main(){int b[100] = {0};int a[100];int i = 0;int tmp;for(i = 0; i < 99; i++){a[i] = i + 1;}int random_pos = rand() % 100;tmp = a[random_pos];a[random_pos] = 8;a[99] = tmp;fo 阅读全文
摘要:
把零件分为4.4.5三份,然后把两个4放在天平两头(1)如果平衡,那不合格的在剩下的5个中,把那8个合格品当做样本,放3个在天平左边,从有次品的5个中取3个放右边和左边合格品做比较,如果平衡,那坏的就在剩下的两个中,随便拿一个和合格品做对比称,平衡就是最后剩下的那个是次品,不平衡就是称的那个是次品。如果放上去的3个不平衡,那说明放上去的有一个是次品,记住是比合格品重还是轻,把三个当中任意两个拿上去称,如果刚才是比合格品重的话,那重的那个就是次品,反之一样,如果平衡,剩下的那个就是次品。(2)如果放上去的不平衡,那剩下的5个就是合格品,记住刚才不平衡的谁轻谁重,把5个合格品放在天平左边,取2个轻 阅读全文
只有注册用户登录后才能阅读该文。 阅读全文
摘要:
1. printf函数在计算参数时是从右向左进行计算的。2. 编程风格: if ( 'A' == a ) 要比 if (a =='A' )好 在将==写成= 时候比较有效。3. a 和 b实现交换的方法: 方法1: a = a + b; b = a - b; a = a - b; 不足之处在于如果a,b都很大时,a+b的值容易溢出。 方法2: a = a ^ b; b = a ^ b; a = a ^ b;4. 在C++程序中调用被C编译器编译后的函数,为什么要加extern "C"? 答:C++语言支持函数重载,C语言不支持函数重载。函数被 阅读全文