算法-实验二
作者:互联网
算法设计与分析
实验二
第一题
众数问题:【问题描述】给定含有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