目录
一、输入多个正整数n和m,求其最大公约数和最小公倍数
提示:
1. 最大公约数(GCD)
最大公约数可以通过多种算法求得,其中最著名的是欧几里得算法(Euclidean algorithm)。
欧几里得算法的基本思想:
- 对于两个非负整数a和b(假设a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。
- 递归地应用这个过程,直到余数为0,此时除数即为两数的最大公约数。
2. 最小公倍数(LCM)
两个数的最小公倍数(LCM)与它们的最大公约数(GCD)之间存在一个简单的关系:
- 两数的乘积等于它们的最大公约数与最小公倍数的乘积。
代码如下:
#include <stdio.h>
int gcd(int m,int n);
int gcd(int m, int n) {
if (n == 0) {
// 当 n 为 0 时,m 就是最大公约数
return m;
}
// 使用递归调用计算 gcd(n, m % n)
return gcd(n, m % n);
}
int main() {
int m,n;
while(scanf("%d %d",&m,&n)!=EOF)
{
int lcm;//最小公倍数
lcm= m*n/gcd(m,n);
printf("%d和%d的最大公约数为:%d\n",m,n,gcd(m,n));
printf("%d和%d的最小公倍数为:%d\n",m,n,lcm);
}
return 0;
}
二、C语言实现打印出心形
效果图以上图为例
提示:我们可以分为6个部分来进行处理
第一部分(第一行)、第二部分(第二行)、第三部分(第三行)、第四部分(第4-7行)、第五部分(8-12行)、第六部分(第14行)
完整代码如下:
#include<stdio.h>
int main()
{
char a = '*';
int i = 0;
int j = 0;
for (i = 0; i < 1; i++)//第一行
{
for (j = 1; j < 29; j++)
{
if (j < 6 || (j > 10 && j < 20) || j>25)
{
printf(" ");
}
else
{
printf("%c", a);
}
}
printf("\n");
}
for (i = 0; i < 1; i++)//第二行
{
for (j = 1; j < 29; j++)
{
if (j < 3 || (j > 12 && j < 18) || j>27)
{
printf(" ");
}
else
{
printf("%c", a);
}
}
printf("\n");
}
for (i = 0; i < 1; i++)
{
for (j = 1; j < 29; j++)
{
if (j == 1 || j == 15)
printf(" ");
else
printf("%c", a);
}
}
printf("\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 29; j++)
{
printf("%c", a);
}
printf("\n");
}
for (i = 0; i < 7; i++)
{
for (j = 0; j < 2 * (i + 1) - 1; j++)
{
printf(" ");
}
for (j = 0; j < 27 - i * 4; j++)
{
printf("%c", a);
}
printf("\n");
}
for (i = 0; i < 14; i++)
{
printf(" ");
}
printf("%c\n", a);
return 0;
}
三、打印菱形
代码如下:
#include<stdio.h>
int main()
{
int i,j;
//以五行为例,上半部分
for(i=0;i<5;i++)
{
for(j=0;j<5-i-1;j++)
{
printf(" ");
}
for(j=0;j<2*i+1;j++)
{
printf("*");
}
printf("\n");
}
//下半部分
for(i=0;i<4;i++)
{
for(j=0;j<=i;j++)
{
printf(" ");
}
for(j=0;j<2*(5-i-1)-1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
运行效果如下: