算法设计与分析课设

前言:没时间写,只写了写代码,不能保证全对,挑的题也都是简单的。回溯的题自己写的不对,找的别人的写了下

分治:

3、整数因子分解

大于1的正整数n可以分解为:n=x1×x2×……×xm。

例如,当n=12时,共有8种不同的分解式:

12=12

12=6×2

12=4×3

12=3×4

12=3×2×2

12=2×6

12=2×3×2

12=2×2×3

输入:

数据有多行,给定正整数(正整数小于10000000)

输出: 

每个数据输出一行,是正整数n的不同分解式数量。

输入样例

12

35

输出样例

8

3

#include
#include
using namespace std;
int resolve(int n)
{
	int count = 1, i;					// ans = 1初始表示n = n的情况
	for (i = 2; i * i < n; i++){
        if (n % i == 0)				// i 是 n的因子, n / i也是n的因子
			count += resolve(i) +resolve(n / i);
    }		
	if (i * i == n)					// i是n的因子, 并且i * i == n时只有这一种情况, 左右交换也是一种
		count += resolve(i);
	return count;
}

int main()
{
	int n;
	while(scanf("%d",&n)!=-1){
		cout<

动态规划

4、台阶问题

问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。

实际情况:给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置,路径中所有数字累加起来就是路径和,返回所有路径的最小路径和,如果给定的m如下,那么路径1,3,1,0,6,1,0就是最小路径和,返回12.

1 3 5 9

8 1 3 4

5 0 6 1

8 8 4 0

 

 

#include
using namespace std;
const int N=10;
int m[N][N];
int main(){ 
    int n;
    cin>>n;
    for(int i=0;i>m[i][j];
        }
    }
    int dp[n][n]={0};
    for(int i=0;idp[i][j+1]){
            cout<

贪心

1、文件连接问题:给定一个大小为n的数组F,数组元素F[i]表示第i个文件的长度。现在需要将所有文件合并成一个文件,文件越长后面连接成新文件花费的时间越长,试给出贪心算法给出文件连接顺序,保证连接文件花费的时间最短。 

#include
#include
#include
using namespace std;
const int N=100;
// 文件连接问题:给定一个大小为n的数组F,数组元素F[i]表示第i个文件的长度。
// 现在需要将所有文件合并成一个文件,
// 文件越长后面连接成新文件花费的时间越长,试给出贪心算法给出文件连接顺序,
// 保证连接文件花费的时间最短。
int main(){
    int n;
    cin>>n;
    int F[N],P[N];
    for(int i=0;i>F[i];
    }
    for(int i=0;i

 

回溯:

1、素数环问题

(1)问题描述:输入正整数n,把整数1,2,3,4…..n组成一个环,使得相邻的两个整数之和均为素数。

(2)样例

输入:

6

输出:

1 4 3 2 5 6

1 6 5 2 3 4

(3)提示:n=4时的搜索解空间树。

 

#include
#include
using namespace std;
int n=0;
const int N=105;
int a[N];       //对应环 
int visit[N]={-1};  //标记数组 0表示未用 1表示已用 
int check(int k)  //判断数字x是否为素数 
{
	int i,n;
	n=(int)sqrt(k);
	for(i=2;i<=n;i++)
		if(k%i==0) return 0;
	return 1;     		
}
void dfs(int step)
{
	if(step==n&&check(a[0]+a[n-1])==1) //全部填满而且第一个元素和最后一个元素满足就输出 
	{
		for(int i=0;i>n;
	a[0]=1;  //因为是环所以第一个元素固定 
	visit[1]=1; //1已用 
	dfs(1);	//从第一个元素开始 
	return 0;	
} 

 

你可能感兴趣的:(算法设计与分析,c++,算法)