编程语言
首页 > 编程语言> > 算法-实验二

算法-实验二

作者:互联网

算法设计与分析

实验二

第一题

众数问题:【问题描述】给定含有S个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重数S的众数是2,其重数为3 。
【算法设计】对于给定的由n个自然数组成的多重集S,计算S的众数及其重数。
【输入形式】第1行为多重数集S中元素个数n;接下来的n行中,每行有一个自然数。
【输出形式】输出文件有2行,第1行是众数,第2行是重数。
【样例输入】
6
1
2
2
2
3
5
【样例输出】
2
3

#include<iostream>
#define MAXSIZE 100+5
using namespace std;
typedef struct
{
    int num;
    int count;
}Node;

Node func()
{
    int n;
    cin>>n;
    int S[MAXSIZE];
    Node node[MAXSIZE];
    for(int i=0; i<MAXSIZE; ++i)
    {
        node[i].count=0;
        node[i].num=-1;
    }
    int num=0, count=0, k=0;
    for(int i=0; i<n; ++i)
    {
        cin>>S[i];
        if(i==0)
        {
            node[k].num=S[i];
            node[k].count++;
        }
        else
        {
            if(node[k].num==S[i])
            {
                node[k].count++;
            }
            else
            {
                node[++k].num=S[i];
                node[k].count++;
            }
        }
    }
    for(int i=0; i<=k; ++i)
    {
        if(count<node[i].count)
        {
            num=node[i].num;
            count=node[i].count;
        }
    }
    Node p;
    p.count=count;
    p.num=num;
    return p;
}
int main()
{
    Node p = func();
    cout<<p.num<<endl;
    cout<<p.count<<endl;
    return 0;
}

第二题

双色汉诺塔问题:【问题描述】设 A、B、C 是 3 个塔座。开始时,在塔座 A 上有一叠共 n 个圆盘,这些圆盘自下而上, 由大到小地叠在一起。各圆盘从小到大编号为 1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座 A 上的这一叠圆盘移到塔座 B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:
规则(1):每次只能移动 1 个圆盘;
规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上;
规则(3):任何时刻都不允许将同色圆盘叠在一起;
规则(4):在满足移动规则(1)-(3)的前提下,可将圆盘移至 A,B,C 中任一塔座上。

【输入形式】输入圆盘个数n
【输出形式】每一行由一个正整数 k 和 2 个 字符 c1 和 c2 组成,表示将第 k 个圆盘从塔座 c1 移到塔座 c2 上

#include<iostream>
using namespace std;
void move_hanoi(char A, char B, int n)
{
    cout<<n<<" "<<A<<" "<<B<<endl;
}
void Hanoi(char A, char B, char C, int n)
{
    if(n==1)
    {
        move_hanoi(A,C,n);
        return ;
    }
    Hanoi(A, C, B, n-1);
    move_hanoi(A,C,n);
    Hanoi(B, A, C, n-1);
}
/*
先把前n-1个圆盘借助C移动到B上,再把第n个圆盘移动到C上
然后把前n-1个圆盘借助A移动到C上
*/
int main()
{
    int n;
    cin>>n;
    Hanoi('A','B','C',n);
    return 0;
}

标签:node,圆盘,int,算法,实验,重数,众数,塔座
来源: https://www.cnblogs.com/HD0117/p/16592605.html