有一项工程,甲完成需要a天,乙需要b天,丙需要n天,丁需要s天(s<=50)他们四个人合起来,一天可以完成这个工程,四个数(a≤b≤n≤s)都是自然数,写程序求这几个数 这样写对吗


#include <stdio.h> 

int main()
{
    int a,b,n,s;
    for(a=2;;a++)
    {
        for(b=a;;b++)
        {
            for(n=b;;n++)
            {
                for(s=n;s<=50;s++)
                    if((int)(1.0/a+1.0/b+1.0/n+1.0/s)==1 && a<=b && b<=n &&n<=s)   break;
                break;
            }    
            break;
        }    
        break;
    }
        
    printf("甲%d,乙%d,丙%d,丁%d",a,b,n,s);
    return 0;
}

就是要1/a+1/b+1/n+1/s=1
(int)(1.0/a+1.0/b+1.0/n+1.0/s)==1这么写是不对的,浮点数有误差,如果四个数的倒数加起来是0.99999999,你(int)转换后是0

代码修改后如下


#include <stdio.h>
int main()
{
    int a, b, n, s;
    for (a = 2; a <= 50; a++)
    {
        for (b = a; b <= 50; b++)
        {
            for (n = b; n <= 50; n++)
            {
                for (s = n; s <= 50; s++)
                    if ((1.0/a+1.0/b+1.0/n+1.0/s)==1)
                        printf("甲%d,乙%d,丙%d,丁%d\n", a, b, n, s);
            }
        }
    }
    // printf("甲%d,乙%d,丙%d,丁%d", a, b, n, s);
    return 0;
}

img