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重循环,消耗的时间太长了
求大神解答 展开
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重循环,消耗的时间太长了
求大神解答 展开
4个回答
展开全部
这题实际上可以通过题目作一些简化
因为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);
}
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
}
}
暂时只想到了这个提高效率的办法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用 28*i+ 15*j + 60*k + 12000 = 77250 这个只要三重循环啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询