C语言实验题——最节省材料
描述一个长度为L米的材料,需要截成长度为a米和b米的短材料,求两种短材料各截多少根时,剩余的材料最少。
输入
数据有多行,每行三个整数,分别是L,a,b;
输出
每行输出截出a长度和截出b长度材料的根数,结果有多个时,只输出总根数最少或最长材料根数最少的数据。
样例输入
10 2 3
样例输出
2 2
#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; }写好了,用了时间还是太多了吧
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; } 不知道讲得怎么样,见笑了.....