列表

详情


WY55. 最小众倍数

描述

给定5个正整数, 它们的最小的众倍数是指的能够被其中至少三个数整除的最小正整数。 给定5个不同的正整数, 请计算输出它们的最小众倍数。

输入描述

输入包括一行,一行中有五个各不相同的正整数a, b, c, d, e(1 ≤ a, b, c, d, e ≤ 100), 以空格分割

输出描述

输出一个整数,表示它们的最小众倍数

示例1

输入:

1 2 3 4 5

输出:

4

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-27

#include <stdio.h>

int min(int x, int y)
{
    int p = x*y;
    int n = 1;
    while(n)
    {
        n = x % y;
        x = y;
        y = n;
    }
    return p/x;
}

int main()
{
    int arr[5] = {0};
    scanf("%d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]);
    long long p = arr[0] * arr[1] * arr[2] *  arr[3] * arr[4];
    int i, j, k, min1, min2;
    for(i = 0; i < 5; i++)
    {
        for(j = i + 1; j < 5; j++)
        {
            for(k = j + 1; k < 5; k++)
            {
                min1 = min(arr[i], arr[j]);
                min2 = min(min1, arr[k]);
                p > min2 ? p = min2:p;
            }
        }
    }
    printf("%lld\n", p);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-14

#include <stdio.h>

int fun(int m,int n)//求最小公倍数
{
    int temp=0;
    int sum = m*n;
    while(n)
    {
        temp = m%n;
        m=n;
        n=temp;
    }
    return sum/m;
}

int cmp(const void*a,const void* b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
    int a,b,c,d,e=0;
    scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
    int *num = (int*)malloc(sizeof(int)*10);
    int *n = (int*)malloc(sizeof(int)*5);
    n[0] = a;
    n[1] = b;
    n[2] = c;
    n[3] = d;
    n[4] = e;
    int u=0;
    for(int i=0;i<3;i++)
    {
        for(int j=i+1;j<4;j++)
        {
            for(int k = j+1;k<5;k++)
            {
                int t =fun(n[i],n[j]);
                int tt = fun(t,n[k]);
                num[u++] = tt;
            }
        }
    }
    qsort(num,10,sizeof(int),cmp);
    printf("%d",num[0]);
    return 0;
}

上一题