我开始学习C,而我正在尝试开发一个小应用程序。拜托,您能否提供一些关于该怎么做的提示?
我想从三个不同的品牌购买鞋子(品牌A = 50;品牌B = 100;品牌C = 150)。我需要花2000美元购买20匹鞋。
我如何编写程序来显示所有可能的组合?
E.g。 brandA(10鞋),brandB(0鞋),brandC(10鞋); brandA(1鞋),brandB(3鞋),brandC(11鞋)等
请,我现在不想要完整的代码,但有关如何操作的提示。
我非常感谢任何帮助。 TKS!
我已更新我的帖子以包含代码。这段代码有意义吗?
int main(void) {
int brandA=50, brandB=100, brandC=150, ba, bb, bc;
for(ba=0;ba<=20;ba++) {
for(bb=0;bb<=20;bb++) {
for(bc=0;bc<=20;bc++) {
if(ba+bb+bc==20 && (ba*brandA)+(bb*brandB)+(bc*brandC)==2000 {
printf("You can buy %d brandA, %d brandB, %d brandC", ba,bb,bc);
}
}
}
}
return 0;
}
答案 0 :(得分:0)
首先,你必须有一个算法......
注意:您可以使用3个'for'周期:)
答案 1 :(得分:0)
如果你是初学者,我建议先回溯和递归。
即使回溯是一种昂贵的技术,对于初学者来说,看看递归如何为问题提供一个简单而强大的解决方案是非常好的。
以下是一些资源供您开始使用:http://web.cse.ohio-state.edu/~gurari/course/cis680/cis680Ch19.html
如果您对编程很认真,那么您还应该阅读一些关于算法和数据结构的书籍,因为您将严重依赖这些基本原理:
1. The Algorithm Design Manual
2.务实的程序员:从熟练工到大师
答案 2 :(得分:0)
现在你已经开始工作了,我觉得在建议潜在的改进方面没有任何负罪感。正如其他人所提到的,您可以使用A
,B
&amp;之间的关系,而不是纯粹的强力三重循环。 C
消除第三个循环。请记住,在C中,通常有很多方法可以解决任何给定的问题以及处理输出的许多方法。只要逻辑和语法正确,那么唯一的区别就在于算法的效率。这是一个消除第三个循环的例子:
#include <stdio.h>
int main (void) {
int ca = 50;
int cb = 100;
int cc = 150;
int budget = 2000;
int pairs = 20;
int a, b, c, cost;
for (a = 0; a < budget/ca; a++)
for (b = 0; b < budget/cb; b++)
{
c = pairs - (a + b);
if ((cost = a * ca + b * cb + c * cc) != budget)
continue;
printf ("\n a (%2d) * %3d = %4d"
"\n b (%2d) * %3d = %4d"
"\n c (%2d) * %3d = %4d\n",
a, ca, a * ca, b, cb, b * cb, c, cc, c * cc);
printf (" ===================\n (%d) %d\n", pairs, budget);
}
return 0;
}
<强>编译强>
由于您不熟悉C,因此在编译代码时,请确保始终编译警告已启用。编译器警告是有原因的,并且在极少数情况下您可以依赖不编译而没有警告的代码。至少,您需要在启用-Wall -Wextra
(gcc)的情况下进行编译。如果您想针对几乎所有可能的警告检查代码,也可以包含-pedantic
。例如,要编译上面的代码:
$ gcc -Wall -Wextra -pedantic -o bin/shoes shoes.c
如果要在最大程度上添加优化,可以添加:
-Ofast (-03 with gcc < 4.6)
<强>输出强>
$ ./bin/shoes
a ( 1) * 50 = 50
b (18) * 100 = 1800
c ( 1) * 150 = 150
===================
(20) 2000
a ( 2) * 50 = 100
b (16) * 100 = 1600
c ( 2) * 150 = 300
===================
(20) 2000
a ( 3) * 50 = 150
b (14) * 100 = 1400
c ( 3) * 150 = 450
===================
(20) 2000
<..snip..>
a ( 9) * 50 = 450
b ( 2) * 100 = 200
c ( 9) * 150 = 1350
===================
(20) 2000
a (10) * 50 = 500
b ( 0) * 100 = 0
c (10) * 150 = 1500
===================
(20) 2000
祝你好运学习C.没有其他类似的语言可以为你提供你在C中所拥有的精确低级控制。(除了汇编程序)但是这种精确控制并不是免费的。有一个学习曲线涉及到C还有一点需要覆盖,然后你就会失去那些&#34;捞出水&#34;感觉和感觉舒适的语言。通过它提供的低级访问来学习C的好处是它将极大地提高您对编程如何工作的理解。这些知识适用于所有其他编程语言(无论其他语言如何努力隐藏您的详细信息)。 C花了很多时间。