C语言实验题——最节省材料
描述一个长度为L米的材料,需要截成长度为a米和b米的短材料,求两种短材料各截多少根时,剩余的材料最少。
输入
数据有多行,每行三个整数,分别是L,a,b;
输出
每行输出截出a长度和截出b长度材料的根数,结果有多个时,只输出总根数最少或最长材料根数最少的数据。
样例输入
10 2 3
样例输出
2 2
2013-02-23 16:40
2013-02-23 16:54
程序代码:#include <stdio.h>
#define M 1000+10
int main() {
int L, a, b, n, m, t;
while(scanf("%d %d %d", &L, &a, &b) != EOF) {
t = L / 2;
for(n = 0; n < M; n++)
for(m = 0; m < M; m++)
if(n * a + m * b == L && n + m < t)
printf("%d %d\n", n, m);
}
return 0;
}
写好了,用了时间还是太多了吧
2013-02-23 17:08
2013-02-23 17:08
2013-02-24 12:12
2013-02-24 12:22
程序代码:1.看题的输入:
输入
数据有多行,每行三个整数,分别是L,a,b;
就可以写出
#include <stdio.h>
int main() {
int L, a, b;
while(scanf("%d %d %d", &L, &a, &b) != EOF) {
}
return 0;
}
2.看题的输出
输出
每行输出截出a长度和截出b长度材料的根数,结果有多个时,只输出总根数最少或最长材料根数最少的数据。
先不分析这句话
#include <stdio.h>
int main() {
int L, a, b, n, m;
while(scanf("%d %d %d", &L, &a, &b) != EOF) {
printf("%d %d\n", n, m);
}
return 0;
}
然后分析这句话:结果有多个时,只输出总根数最少或最长材料根数最少的数据。
先不分析这句话
最多的情况是L / 2,并且任何>2的数都可以由2和3组成,所以只需要小于L/2就可以了
且总长度=长2的*根数+长3的*根数
即
#include <stdio.h>
int main() {
int L, a, b, n, m, t;
while(scanf("%d %d %d", &L, &a, &b) != EOF) {
t = L / 2;
if(n * a + m * b == L && n + m < t)
printf("%d %d\n", n, m);
}
return 0;
}
好了,这里就只要解决根数的问题了
我运用的是用两个for语句给根数限定范围....直到计算机找到符合所有条件的根数
#include <stdio.h>
#define M 1000+10
int main() {
int L, a, b, n, m, t;
while(scanf("%d %d %d", &L, &a, &b) != EOF) {
t = L / 2;
for(n = 0; n < M; n++)
for(m = 0; m < M; m++)
if(n * a + m * b == L && n + m < t)
printf("%d %d\n", n, m);
}
return 0;
}
不知道讲得怎么样,见笑了.....

2013-02-24 12:44
大哥指导
2013-02-24 12:45
2013-02-24 12:46
2013-02-24 13:32