目录
一:最大公约数求解
①:试除法
最大公约数是什么
就是要a % x(公约数)== 0 &&(并且) b % x == 0;
要求出公约数的最大值,首先要知道,最大公约数不会超过两个数中较小的那个数。
所以我们首先要求出两个数中的较小值。这里我们可以使用三目操作符。
int x = a > b? b : a;
此时变量X就是较小值。
我们用a和b分别除上x看看是否余0;
if(a % x == 0 && b % x == 0)
这是一次判断,我们要进行多次判断来求最大公约数,所以要加个循环。
while(x)
{
if (a % x == 0 && b % x == 0)
printf("%d", x);
break;
else
x--;
}
不符合条件让x减一,然后接着循环。
当符合条件时跳出循环,打印x。(后面要加个break来跳出循环,不然会死循环)
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int x = a > b ? b : a;
while (x)
{
if (a % x == 0 && b % x == 0)
{
printf("%d", x);
break;
}
else
x--;
}
return 0;
}
完整代码如上。
②辗转相除法
用较大数a除以b,得出余数x,若余数x不为0,将b赋值给a,将余数x赋值给b,再次相除,直到余数为0时,此时的b就是最大公约数。
#include<stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
while (a % b)
{
int x = a % b;
a = b;
b = x;
}
printf("%d", b);
return 0;
}
当余数为0时跳出循环打印b就是最大公约数。
二: 把三个数按大小依次输出。
定义三个变量a b c,将a与b进行比较,如果a比b小,就把a和b的值互换,然后在将a与c比较,如果a比c小就将a和c互换。a比较完了再将b和c进行比较。
我们换成代码如下:
#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
int count = 0;
count = a;
a = b;
b = count;
}
if(a < c)
{
int count = 0;
count = a;
a = c;
c = count;
}
if(b < c)
{
int count = 0;
count = b;
b = c;
c = count;
}
printf("%d %d %d", a, b, c);
return 0;
}
可以看出红圈部分的代码有所重复,我们可以写成一个函数进行优化。
void add(int* a, int* b)
{
int count = *a;
*a = *b;
*b = count;
}
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int* pa = &a;
int* pb = &b;
int* pc = &c;
if (a < b)
{
add(&a, &b);
}
if(a < c)
{
add(&a, &c);
}
if(b < c)
{
add(&b, &c);
}
printf("%d %d %d", a, b, c);
return 0;
}
这样看起来就就简洁多了。
注意函数传参时要用指针,不然无法改变变量的值。