数据结构与算法一
来源:互联网 发布:php和游戏设计师哪个好 编辑:程序博客网 时间:2024/05/16 02:10
题目一:求1!+2!+…..+n! 的和的后6位,(注意n的范围)
#include <iostream>using namespace std;const int MAX = 1000000;int getResu(int n){int sum=0;int temp= 1;for(int i=1; i <= n; i++){temp *= i;temp %= MAX;sum += temp;sum %= MAX;}return sum ;}int main(){int n;while(cin>>n){if(n > 0)cout << getResu(n) << endl;elsecout << "Please input a integer greater than zero !" <<endl;}return 0;}
题目二:一个长度为N 的序列中,求最大值和最小值并输出。最后分析可能存在的优化性。
#include <iostream>#include <cstdlib>// 设置随机函数#include <ctime>using namespace std;const int MAX_COUNT = 10000;const int MAX_VALUE = 1000;int number[MAX_COUNT];void init(){ //0-1000for(int i=1; i <= MAX_COUNT; i++)number[i] = rand()%MAX_VALUE;for(int i=1; i <= MAX_COUNT; i++)cout << number[i] << " ";cout << endl;}void solve(){int max, min, flag;if((flag=MAX_COUNT%2))// 如果为真,1max=min=number[1];else{// 为偶数的情况if(number[1]>number[2]){max = number[1];min = number[2];}else{max = number[2];min = number[1];}}if(flag) flag = 2;else flag = 3;for(int i=flag; i < MAX_COUNT; i+=2){if(number[i]>number[i+1]){if(number[i] > max)max = number[i];if(number[i+1] < min)min = number[i+1];}else{if(number[i+1] > max)max = number[i+1];if(number[i] < min)min = number[i];}}cout << "MAX = " << max << endl;cout << "MIN = " << min << endl;}int main(){ //随机函数的种子srand(time(NULL));init();// 初始化solve();// 解决return 0;}
设为第一个数的值。如果n 是偶数,那么就将第一个数和第二个数做比较,较小的值就是当前的最小值较大的值就是当前的最大值,接下来的数就成对的比较,取较小和当前最小比,取较大和当前最大比。最后来分析一下总的比较次数,如果n 是奇数,那么总共进行3(n/2)次比较,如果n 是偶数,则是 3(n-2)/2+1 次比较,至多是3(n/2)。
题目三:排列问题
参考我的另一篇博客:http://blog.csdn.net/china_zoujinyong/article/details/17588897
题目四:台阶问题
问题描述:我们学校北区食堂一楼到二楼的楼梯一共有17个台阶,正常人的你一次可以选择迈1个台阶,2个台阶,或3个台阶,问你从最底下走上17个台阶,一共有多少种走法?
解法一:
上n个台阶的方法等于上n-1个台阶和n-2个台阶和n-3个台阶的方法之和
台阶数 方法 步骤
11
22 1+1
43 1+2 1+1+1 2+1
71+3 1+2+1 1+1+1+1 1+1+2 2+1+1 2+2 3+1
131+1+1+1+1 1+2+2 2 +1+2 1+2+1 1+1+3 3+1+1 1+3+1
1+2+1+1 1+1+2+1 2+1+1+1 1+1+1+2 2+3 3+2
6 24 1+1+1+1+1+1 2+1+1+1+1 (5种) 3+1+1+1 (4种)
2+2+1+1(6种)2+3+1(6种)3+3 2+2+2
#include <iostream>using namespace std;int recu(int n){ if(n==1) return 1; if(n==2) return 2; if(n==3) return 4; return recu(n-1)+recu(n-2)+recu(n-3);}int main(){ int n; cin >> n; cout << recu(n) << endl; return 0;}
方法二:设置一个容器,往里面放东西(1,2,3,),如果容器里面数的值等于给定的n 的值的大小,那么满足条件,作为一次结果保存起来。
#include <iostream>using namespace std;int n, resu=0;int number[3]={1,2,3};void recu(int count){ if(count==n) { resu++; return ; } if(count > n) return ; for(int i=0; i < 3; i++) { count += number[i]; recu(count); count -= number[i]; }}int main(){ cin >> n; recu(0); cout << resu << endl; return 0;}
2 0
- 算法与数据结构(一)
- 数据结构与算法一
- 数据结构与算法一
- 数据结构与算法(一)
- 数据结构与算法笔记一
- 数据结构与算法感想一
- 【数据结构与算法】一 数组
- 数据结构与算法(一) 交换
- 数据结构与算法学习一
- 数据结构与算法-排序(一)
- 数据结构与算法笔记一
- 数据结构与算法(一)
- 数据结构与算法(一)
- 数据结构与算法(一)
- 数据结构与算法(一)
- 数据结构与算法一:算法复杂度分析
- 一、数据结构 读书笔记(一)基本概念与算法
- 数据结构与算法总论(一)
- 第74天
- 【Hibernate步步为营】--单向关联一对一映射
- Class.forName的作用以及为什么要用它【转】
- 平实给力的写作指导入门手册——leo鉴书57
- 为什么同时存在IP和Mac地址两种地址?
- 数据结构与算法一
- C++字符串常量跨平台编译问题(与字符串编码相关)
- 获取中文全拼音的SQL函数
- ios中推送
- SQL数据库试题
- 视频跟踪的研究
- ios真机调试步骤
- 51系列小型操作系统精髓 简单实现2
- ios发布