c语言中几个数学问题的求解(2)
最大公约数:
#include <stdio.h>
int GCD(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1, num2;
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
// 调用GCD函数计算最大公约数
int result = GCD(num1, num2);
// 得到结果
printf("最大公约数是: %d\n", result);
return 0;
}
最小公倍数:
第一种方法:
#include <stdio.h>
//求最小公倍数
int main(){
int a,b;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
int i;
for(i=a;i<=a*b;i++){
if(i%a==0&&i%b==0){
printf("最小公倍数是:%d\n",i);
break;
}
}
return 0;
}
代码解释:
两个数的“最小公倍数”最大就是二者的乘积,所以在上述代码中利用a*b
规定范围,利用for
循环对范围内的每一个数进行测试,直到出现第一个满足%a和%b都==0的数出现
利用break
跳出,进行输出.
第二种方法:
实现思路:
代码如下:
#include <stdio.h>
int GCD(int a, int b)
{
int temp;
while (b > 0)
{
temp = a % b;
a = b;
b = temp;
}
return a;
}
int LCM(int x,int y){
int result;
result = x*y/GCD(x,y);
return result;
}
int main(){
printf("请输入两个整数:");
int a,b;
scanf("%d%d",&a,&b);
printf("最小公倍数是:%d\n",LCM(a,b));
return 0;
}
排列和组合
阶乘的几种方式
第一种
普通方式(利用循环)
int jiecheng(int n){
int a = 1;
for (int i = 1; i <= n; i++)
{
a = a * i;
}
return a;
}
第二种
利用函数的递归
int jiecheng(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * jiecheng(n - 1);
}
}
排列
思路实现上述公式:引入P,N,K三个量,同时引入阶乘算法
代码如下:
#include <stdio.h>
int jiecheng(int n){
int a = 1;
for (int i = 1; i <= n; i++)
{
a = a * i;
}
return a;
}
int main(){
int n,p,k;
printf("请输入n的值:");
scanf("%d",&n);
printf("请输入k的值:");
scanf("%d",&k);
p = jiecheng(n)/jiecheng(n-k);
printf("p=%d\n",p);
return 0;
}
组合
#include <stdio.h>
//cnm组合数
int jiecheng(int n){
int a = 1;
for (int i = 1; i <= n; i++)
{
a = a * i;
}
return a;
}
int main(){
double p;
int n,m;
printf("请输入n,m的值:");
scanf("%d,%d",&n,&m);
p = jiecheng(m)/jiecheng(n)/jiecheng(m-n);
printf("p=%f\n",p);
}