编程,百马百担问题,有100匹马,驮100担货,大马驮三担,中马驮2担,两匹小马驮一担,求大、中、小各多少匹?

小闲123 2013-11-21 07:02:44
编程,百马百担问题,有100匹马,驮100担货,大马驮三担,中马驮2担,两匹小马驮一担,求大、中、小各多少匹?
...全文
33126 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小闲123 2013-11-24
  • 打赏
  • 举报
回复
修改下,减少循环次数: C/C++ code ? 123456789101112131415 #include <iostream> using namespace std; int main(){ for(int n1=0;n1<=33;n1++){ for(int n2=0;n2<=50;n2++){ int n3=100-n1-n2; if(3*n1+2*n2+n3/2==100) cout<<"Lar = "<<n1<<", Nor = "<<n2<<" , Lit = "<<n3<<endl; } } return 0;} 是错的,因为执行后 Lit不能整除2
Adol1111 2013-11-24
  • 打赏
  • 举报
回复
修改下,减少循环次数:
#include <iostream>

using namespace std;

int main()
{
	for(int n1=0;n1<=33;n1++){
		for(int n2=0;n2<=50;n2++){
			int n3=100-n1-n2;
			if(3*n1+2*n2+n3/2==100)
				cout<<"Lar = "<<n1<<", Nor = "<<n2<<" , Lit = "<<n3<<endl;
		}
	}
	return 0;
}
Adol1111 2013-11-24
  • 打赏
  • 举报
回复
你手动验证下呗
#include <iostream>

using namespace std;

int main()
{
	for(int n1=0;n1<100;n1++){
		for(int n2=0;n2<100-n1;n2++){
			int n3=100-n1-n2;
			if(3*n1+2*n2+n3/2==100 && n3%2==0)//n3可为奇数的话,那么有一匹小马是多余的
				cout<<"Lar = "<<n1<<", Nor = "<<n2<<" , Lit = "<<n3<<endl;
		}
	}
	return 0;
}
max_min_ 2013-11-24
  • 打赏
  • 举报
回复
引用 2 楼 fetag 的回复:
楼上你的代码写的相当没水准~~
呵呵,主要技术不好,另一方面,什么都没有考虑都是直接丢进去了。
小闲123 2013-11-24
  • 打赏
  • 举报
回复
怎么以上的编程,调试出来的结果都不相同,不知道哪一个对,不相信可以都执行一次。
完美算法 2013-11-21
  • 打赏
  • 举报
回复 1

#include <stdio.h>

int main(void)
{
    int i,j,k; 
    for(i=1;i<=33;i++)
    {   
        for(j=1;j<=50;j++)
        {
            k=(100-i*3-j*2)*2;
            if((i+j+k)==100)
            printf("大马%d只,中马%d只,小马%d只\n",i,j,k);  
        }
    }   	
	getchar();
    return 0;
}
还有多远 2013-11-21
  • 打赏
  • 举报
回复
像这种规模的数据,不优化其实也能秒出的... 无聊了,也写一下: 设大马x匹,中马y匹,小马z匹,则由题设可列方程组: 3x + 2y + z/2 = 100 (1) x + y + z = 100 (2) x >= 0 (3) y >= 0 (4) z >= 0 && z % 2 == 0 (5) (1)(2)可化为: 3x + 2y = 100 - z/2 (6) x + y = 100 - z (7) 可得 x = 1.5z - 100 (8) y = 200 - 2.5z (9) 将(8)(9)带入(3)(4)可得: 200/3 <= z <= 80 (10) 又由(5)可知: 68 <= z <= 80且z为偶数(11) 从而由(11)(8)(9)可以写出如下代码:

#include <stdio.h>

int main()
{
    int x, y, z;

    for(z = 68; z <= 80; z += 2){
        x = (z>>1)*3 - 100;
        y = 200 - (z>>1)*5;
        printf("大马%d匹,中马%d匹,小马%d匹\n", x, y, z);
    }

    return 0;
}
gz_qmc 2013-11-21
  • 打赏
  • 举报
回复
#include <stdio.h>
 
int main(void)
{
    int N1,N2,N3;
 
    for(N2=0;N2<=50;N2++)
    {   
        for(N1=0;N1<=(100-N2*2)/3;N1++)
        {
            N3=100-N1*3-N2*2;
            if((N1+N2+N3)==100)
            printf("大马%d只,中马%d只,小马%d只\n",N1,N2,N3);  
        }
    }   
    return 0;
}
gz_qmc 2013-11-21
  • 打赏
  • 举报
回复
//手痒,给1楼优化一下
#include <stdio.h>

int main(void)
{
    int N1,N2,N3;

    for(N2=0;N2<=50;N2++)
    {   
        for(N1=0;N1<=(100-N2*2)/3;N2++)
        {
            N3=100-N1*3-N2*2;
            if((N1+N2+N3)==100)
            printf("大马%d只,中马%d只,小马%d只\n",N1,N2,N3);  
        }
    }   
    return 0;
}
独孤过儿 2013-11-21
  • 打赏
  • 举报
回复
楼上你的代码写的相当没水准~~
max_min_ 2013-11-21
  • 打赏
  • 举报
回复
数学解方程就好了!
#include <stdio.h>

int main(void)
{
    int Lar = 0, Lit = 0, Nor = 0;
    for(Lit = 0; Lit < 100; Lit += 2)
    {   
        for( Nor = 0; Nor < 100; Nor ++ )
            for(Lar = 0; Lar < 100; Lar ++) 
                if (((Lar + Lit + Nor) == 100) && ((3 * Lar + 2 * Nor + Lit / 2) == 100))
                    printf("Lar = %d, Nor = %d , Lit = %d \n", Lar, Nor, Lit);  

    }   
    return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧