甲、乙、丙三人同时放鞭炮编程作业题程序,不用数组和指针

C语言 码拜 9年前 (2015-11-25) 2313次浏览
甲、乙、丙三人同时放鞭炮,甲每隔A秒放一个,乙每隔B秒放一个,丙每隔C秒放一个,他们各自放D个。对任意给定的A、B、C和D,求能听到多少声鞭响。
解决方案:5分
弄错了,是每隔ABC秒放一个
共放D个
这样 每个时间间隔是1秒
D个最多放 D*max(A,B,C) 秒
各人 分别放 A*D秒,B*D秒,C*D秒
假设第一响在同一时间
那么甲 每隔A秒,乙每隔B秒,丙每隔C 会响一声鞭炮
如果三者或者两者同时在放,只能听到一声响。
如果A=B=C
那么只能听到 D 声响
如果 A,B,C 互不相等,并且互质并且D*A, 不等于 K*B,K*C,D*B亦然,D*C亦然,
那么可以听到 3D – 2 声响
如果有公因子,那么就会少一点
所以最少D 最多3D-2
至于编程设置三个变量表示每个人点放的鞭炮个数,设置一个数表示时间
每当A,B,C 秒各放一个鞭炮,听到 每秒有人放炮则听到一声响,无人则没听到最后统计一下听到几声响即可
解决方案:5分
分别求 AB , AC,  BC, ABC的最小公倍数
这四个值分别为 LAB, LAC, LBC, LABC
听到的次数就是
3* D – D* min(A, B) / LAB – D * min(B, C) / LBC – D * min(AC) / LAC + D * min(A, B, C) / LABC
解决方案:10分
//甲、乙、丙三人同时放鞭炮,甲每隔A秒放一个,乙每隔B秒放一个,丙每隔C秒放一个,他们各自放D个。对任意给定的A、B、C和D,求能听到多少声鞭响。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int main() {
    int A,B,C,D;
    int maxABC,i,n;
    char *p;
    scanf("%d%d%d%d",&A,&B,&C,&D);
    maxABC=A;
    if (maxABC<B) maxABC=B;
    if (maxABC<C) maxABC=C;
    p=(char *)calloc(maxABC*D,sizeof(char));
    for (i=0;i<D;i++) {
        p[A*i]=1;
        p[B*i]=1;
        p[C*i]=1;
    }
    n=0;
    for (i=0;i<maxABC*D;i++) if (p[i]) n++;
    free(p);
    printf("%d\n",n);
    return 0;
}
//2 3 7 10
//23
//

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明甲、乙、丙三人同时放鞭炮编程作业题程序,不用数组和指针
喜欢 (0)
[1034331897@qq.com]
分享 (0)