今天主要看了以下内容:
1.寻找和为定值的多个数算法,以中兴面试题为例,即:输入两个整数,从数列1,2,3……n随意取几个数,使其和等于m,要求将其中所有的可能的组合列出来。
使用了STL 的list结构。具体代码如下:
#include<list> #include<iostream> using namespace std; list<int>list1; void find_factor(int sum, int n) { cout<<"传入的参数为:"<<sum<<" "<<n<<endl; // 递归出口 if(n <= 0 || sum <= 0) return; // 输出找到的结果 if(sum == n) { // 反转list list1.reverse(); for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++) cout << *iter << " + "; cout << n << endl; list1.reverse(); } list1.push_front(n); for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++) cout <<"插入后列表值为:"<< *iter << " "; find_factor(sum-n, n-1); //放n,n-1个数填满sum-n cout<<"递归1"<<endl; list1.pop_front(); find_factor(sum, n-1);//不放n,n-1个数填满sum cout<<"递归2"<<endl; } int main() { int sum, n; cout << "请输入你要等于多少的数值sum:" << endl; cin >> sum; cout << "请输入你要从1.....n数列中取值的n:" << endl; cin >> n; cout << "所有可能的序列,如下:" << endl; find_factor(sum,n); return 0; }2.求连续子数组的最大和问题
(1)既有负数又有正数
#include<iostream> using namespace std; int maxsum(int* a,int n) { int sum=0; int b=0; for(int j=0;j<n;j++) { if(b<0) b=a[j]; else b+=a[j]; if(sum<b) sum=b; } return sum; } int main() { int a[10]={1,-2,10,4}; cout<<maxsum(a,5)<<endl; return 0; }
(2)处理全部负数数组,返回最的负值
#include<iostream> using namespace std; #define n 4 int maxsum(int a[n]) { int max=a[0]; int sum=0; for(int j=0;j<n;j++) { if(sum>=0) sum+=a[j]; else sum=a[j]; if(sum>max) max=sum; } return max; } int main() { int a[10]={-1,2,-3,-4}; cout<<maxsum(a)<<endl; return 0; }
在自然数220与284之间,有一种非常奇妙的关系,能够整除220的全部正整数(不包括220)之和1+2+4+5+10+20+11+22+55+110恰好等于284;而能够整除284=22×71的全部正整数(不包括284)之和1+2+4+71+142又恰好等于220。这是绝妙的吻合!数学上,具有这样特征的数叫“亲合数”。毕达哥拉斯发现的220与284,是人类认识的第一对亲合数,也是最小的一对亲和数。
4.学习了虚函数相关问题,讲的非常透彻
详细内容见:http://blog.csdn.net/v_july_v/article/details/6446364
程序配置文件操作实践及代码详注,布布扣,bubuko.com
原文:http://blog.csdn.net/iloli/article/details/23767059