#include<stdio.h>
#include<iostream>
using namespace std;
const int N = 10;
void ImproveBubble();//改进后的冒泡算法 在该趟无元素交换的时候 可以提前结束排序
void LCM();
int main ()
{
ImproveBubble();
LCM();
}
void ImproveBubble()
{
int num[N] = {2, 1, 6, 4, 5, 9, 3, 21, 11, 9};
int flag = 0;
int t;
for(int i = 0; i < N && flag == 0; i++)//增加了一个标志位 flag=0表示该趟仍有元素的交换 此时不可以直接结束循环
{
flag = 1;
for(int j = 1; j < N - i; j++)
{
if(num[j - 1] > num[j])
{
t = num[j];
num[j] = num[j - 1];
num[j - 1] = t;
flag = 0;
}
}
}
for(int i = 0; i < N; i++)
cout << num[i] << " ";
cout << endl;
}
void LCM()
{
int x1 = 36, x2 = 9, x3 = 12;
int flag;
int t = 1;
int maxs;
maxs = x1 > x2 ? x1 : x2;//将maxs定义为三个数中的最大值
maxs = maxs > x3 ? maxs : x3;
for(int i = 2; i < maxs; i++)
{
flag = 1;
while(flag == 1)
{
flag = 0;
if(x1 % i == 0)//表明i是x1的一个因子
{
x1 /= i;
flag = 1;
}
if(x2 % i == 0)
{
x2 /= i;
flag = 1;
}
if(x3 % i == 0)
{
x3 /= i;
flag = 1;
}
if(flag == 1)//证明i是三个数中至少一个数的因子
{
t *= i;//若i是因子则与t相乘
}
}
maxs = x1 > x2 ? x1 : x2;//将maxs定义为三个数中的最大值
maxs = maxs > x3 ? maxs : x3;//必须要进行maxs的重新定义 因为在与i进行操作之后三个数的大小关系发生了变化
}
cout << "the result is " << t;
}
[算法设计与分析]3.3.2标志量的妙用(冒泡算法改进+三个数的最小公约数)
最新推荐文章于 2024-01-06 23:53:25 发布