user-0 提问: 编程，百马百担问题，有100匹马，驮100担货，大马驮三担，中马驮2担，两匹小马驮一担，求大、中、小各多少匹？

回复:
user: user-0
content: 修改下，减少循环次数：   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

user: user-1
content: 修改下，减少循环次数：#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; }

user: user-1
content: 你手动验证下呗#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; }

user: user-2
content: 引用 2 楼 fetag 的回复:楼上你的代码写的相当没水准~~ 呵呵，主要技术不好，另一方面，什么都没有考虑都是直接丢进去了。

user: user-0
content: 怎么以上的编程，调试出来的结果都不相同，不知道哪一个对，不相信可以都执行一次。

user: user-3
content: #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; }

user: user-4
content: 像这种规模的数据，不优化其实也能秒出的... 无聊了，也写一下： 设大马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; }

user: user-5
content: #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; }

user: user-5
content: //手痒,给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; }

user: user-6
content: 楼上你的代码写的相当没水准~~

user: user-2
content: 数学解方程就好了！ #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; }