#include<stdio.h>
int gcd(int x,int y)
{
int a[10000],t,count=0,j=0,i=1,max_index; // 初始化变量 a数组 t表示下面进行交换位置的中间变量 i和j表示循环 max_index表示选择排序进行的索引交换
printf("\n公约数为:");
while (1) // 死循环录入公约数元素
{
if (x%i==0 && y%i==0) // 公约数判断条件
{
printf("%5d",i); // 输出每一个公约数元素
count+=1; // 记录录入的公约数的个数,方便后面进行有限制次数的排序
a[j++]=i; // 录入数组公约数元素 【核心算法 a[j++]】
}
i++; // 每次给 i 加一,筛选每个数
if (i>x || i>y) // 死循环停止条件,表示如果 i增加到比 x 或 y 大则停止循环
{
break;
}
}
for (int i=0;i<count-1;i++) // 选择排序 【在无序区找到最大的元素之后和有序区最后一个元素交换位置】------>>>>>当然此处也可以用【冒泡排序】
{
max_index=i; // 将有序区最后一个元素作为有序区中最小的元素
for (j=i+1;j<count;j++)
{
if (a[max_index]<a[j]) // 如果后面的元素比你当前的元素大 【无序区查找】
{
max_index=j; // 找到无序区较大元素的索引----->>>>>将后面大的数的索引赋值给有序区最后一个元素的当前索引
t=a[i]; // 将有序数组最后一个元素赋值给t
a[i]=a[max_index];
a[max_index]=t; // 将无序区的较大的元素与有序区最后一个元素交换位置
}
}
// 循环 j 结束表示找到最大的元素,然后进入下一趟比较
}
printf("\n\n最大公约数为:%d\n",a[0]); // 经过上面排序已经找到最大的公约数元素是数组中第一个元素,所以直接输出 --->>>当然此处也可以不用排序直接 a[count-1] 也是最大的公约数
}
int mul(int x,int y)
{
int a[100],count=0,j=0,i=0; // 初始化变量 a数组名 count表示记录录入的公倍数元素 j和i表示循环并且录入元素
printf("\n公倍数为:");
while (1) // 死循环
{
i++; // 每次给 i 加一,筛选每个数
if (i%x==0 && i%y==0) // 公倍数判断条件
{
printf("%5d",i); // 输出每一个公倍数元素
a[j++]=i; // 录入数组公约数元素 【核心算法 a[j++]】
count+=1; // 记录录入元素的个数
if (count==5) // 因为公倍数有很多,所以在这里加了限制,不然内存不够哟
{
break;
}
}
}
printf("\n\n最小公倍数为:%d\n",a[0]); // 这里就不用排序了,因为是找到最小的公倍数
}
void mean() // void 表示空函数,就当作是一个和int差不多但是它不返回任何值的函数
{
int z,w,q,n; // 初始化变量
printf("请输入两个整数哟:\n请输入:");
scanf("%d %d",&z,&w);
printf("\n");
printf("请问你想查询哪项服务:\n1.查询最大公约数\n2.查询最小公倍数\n\n请输入序列编号:");
scanf("%d",&q);
if (q==1)
{
gcd(z,w); // 函数调用 ------>>>因为我们的main【主】函数在这些函数的下面,所以前面不用写函数声明,这里可以直接调用
}
if (q==2)
{
mul(z,w); // 函数调用 ------>>>因为我们的main【主】函数在这些函数的下面,所以前面不用写函数声明,这里可以直接调用
}
}
int main() // 主函数,程序从这里开始
{
while (1) // 死循环,表示重复开启程序
{
mean(); // 调用前面的void mean() 函数
int y;
printf("\n请问是否继续执行操作:\n1.继续执行操作\n2.退出操作\n\n请输入序列编号:");
scanf("%d",&y);
printf("\n");
if (y==1)
{
continue; // 判断y==1则重新调用void mean() 函数
}
if (y==2) // 后面就是普通程序,代码跑起来可以看看效果哟
{
printf("感谢使用!\n系统正在退出哟\n加油!!!\n未来可期\n");
printf("系统退出成功\n");
break;
}
else
{
printf("下次请按照指令进行输入哟\n系统已退出!!!");
break;
}
}
}
C语言实现公约数,公倍数查询(采用选择排序)
最新推荐文章于 2023-09-03 14:16:46 发布