c语言循环解答问题

要求4个数a,b,c,da是28的倍数b是15的倍数c是60的倍数d=12000保证在77250之内,a+b+c+d=77250(a%28==0&&b%15==0&&c%... 要求4个数a,b,c,d

a是28的倍数
b是15的倍数
c是60的倍数
d = 12000
保证在77250之内,a+b+c+d=77250
(a%28==0 && b%15==0 && c%60==0 && a+b+c+d==77250)
请问这个程序怎么写?我试过4重循环,消耗的时间太长了
求大神解答
展开
 我来答
0动感蚂蚁0
推荐于2016-07-19 · TA获得超过391个赞
知道小有建树答主
回答量:177
采纳率:100%
帮助的人:124万
展开全部

这题实际上可以通过题目作一些简化

因为a+b+c+d=77250,d=12000.所以a、b、c最大值为65250且和为65250,又因为65250是整十位,c是60的倍数,那么a+b必然是整十位,a的倍数尾数不可能是5,所以b必然是30的倍数。这样分析之后计算量就上很多

double i,j,k;
for(i=60;i<65250;i+=60){
    for(j=30;j<65250-i;j+=30){
        for(k=28;k<65250-i-j;k+=28){
            if(i+j+k==65250){
                printf("a=%d,b=%d,c=%d\n",k,j,i);
            }
        }
    }
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e9d4f3d
2015-05-04 · TA获得超过150个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:108万
展开全部
#include<stdio.h>

int main()
{
int x,y,z,a,b,c,d;
  d=12000;
for (x=0; x<=77250/28; ++x)
{
for (y=0; y<=(77250-x*28)/15; ++y)
    {
      if ((77250-28*x-15*y-d)%60==0)
        {
       a = 28*x;
       b = 15*y;
       c = 77250-28*x-15*y-d;
       printf("a=%d  b=%d  c=%d\n",a,b,c);
        }
    }
}
return 0;
}

这样两重循环加上一个判断已经是最简的了

在循环中也加了判断继续优化

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-05-04
展开全部
int x,y,z;

for (x=0; x<=77250/28; ++x)
{
    for (y=0; y<=77250/15; ++y)
    {
        for (z=0; z<=77250/60; ++z)
        {
            if (28*x + 15*y + 60*z + d == 77250)
            {
                a = 28*x;
                b = 15*y;
                c = 60*z;
            }
        }
    }
}

暂时只想到了这个提高效率的办法。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
流年市烟花
2015-05-04
知道答主
回答量:35
采纳率:0%
帮助的人:10.9万
展开全部
直接用 28*i+ 15*j + 60*k + 12000 = 77250 这个只要三重循环啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式