ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法-实验二

2022-08-16 19:01:47  阅读:115  来源: 互联网

标签:node 圆盘 int 算法 实验 重数 众数 塔座


算法设计与分析

实验二

第一题

众数问题:【问题描述】给定含有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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有