栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法设计与分析第二章习题参考代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法设计与分析第二章习题参考代码

2-5: 有重复元素的排列问题:
参考代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;

//有重复问题的排列问题
int n;
char a[101];
void Swap(int x,int y)
{
    char t;
    t=a[x];
    a[x] = a[y];
    a[y] = t;
}
int issame(int x,int y)
{
    for(int k=x; k>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
    }
    permutation(1);
    return 0;
}

2-6:排列的字典序问题:
参考代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;

//排列的字典序问题
int n;
char a[101];
int f[50];
int factorial(int m)
{
    if(m == 1)
    {
        f[m] = 1;
        return f[m];
    }
    f[m] = m * factorial(m-1);
    return f[m];
}
int calculate()
{
    int sum = 0;
    for(int i=1; i<=n; i++)
    {
        int coun = 0;
        int x = a[i] - '0';
        for(int j=1; j<=i; j++)
        {
            if(a[j]<=a[i])
            {
                coun++;
            }
        }
        sum+=(x-coun) *f[n-i];
    }
    return sum;

}
void Swap(int x,int y)
{
    char t;
    t = a[x];
    a[x] = a[y];
    a[y] = t;
    
}
void get_next()//获取字典序排列的下一种排列
{
       for(int i=n; i>=1; i--)
    {
         if(a[i]>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
    }
    int l = factorial(n);
    cout< 

2-7:集合划分问题:
参考代码:
测试数据1
输入:

5

输出:

52
#include 
#include 
#include 
#include 
#include 

using namespace std;

// 集合划分问题

int sum;
int set_part(int n,int m)
{
   if(m == 1)
     return 1;
   if(n == m)
    return 1;
   return set_part(n-1,m-1)+m*set_part(n-1,m);

}
int main()
{
    int n;
    cin>>n;
    sum = 0;
    for(int i=1; i<=n; i++)
    {
        sum+=set_part(n,i);
    }
    cout< 

2-8 集合划分问题2
参考代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;

// 集合划分问题2

int sum;
int set_part(int n,int m)
{
   if(m == 1)
     return 1;
   if(n == m)
    return 1;
   return set_part(n-1,m-1)+m*set_part(n-1,m);

}
int main()
{
    int n,m;
    cin>>n>>m;
    sum = 0;
    cout< 

2-9 双色Hanoi塔问题
参考代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;

// 双色Hanoi塔问题

void move(int n, char a, char c, char b)
{
    if(n == 1)
    {
        cout<>n;
    move(n,'A','C','B');
    return 0;
}

2-10:标准二维表问题:
解题思路: 利用进栈出栈相关
参考代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;

// 标准二维表问题
long long a[1000];
void get_()
{
    a[0] = 1;
    for(int i=1;i<1001;i++)
    {
        long long sum = 0;
        for(int j=0; j>n;
    get_();
    cout< 

书上例题
2-11 循环赛日程表
示例1
输入:

8

输出:

1 2 3 4 5 6 7 8 
2 1 4 3 6 5 8 7 
3 4 1 2 7 8 5 6 
4 3 2 1 8 7 6 5 
5 6 7 8 1 2 3 4 
6 5 8 7 2 1 4 3 
7 8 5 6 3 4 1 2 
8 7 6 5 4 3 2 1

参考代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;
// 循环赛日程表
int a[101][101];
void init_(int n)
{
    for(int i=1; i<=n; i++)
    {
        a[i][1] = i;
    }
}
void set_part(int n,int l)
{
    if(l == 1)
    return ;
    int nid = l/2;
    set_part(n,nid);
    int op = n/l;
    for(int k =0 ;k>n;
    init_(n);
    set_part(n,n);
    show(n);
    return 0;
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号