题目:
有 1,2,5三个数字 每个数字可以有任意多
问题:
求用这三个数字加法组合成10的方案 如 5+5 2+2+2+2+2
给分原则: 程序效率最优的给的最多,其次是能回答上来的
解答: 可看作一个三元一次方程来解,代码如下:
printf("\r\n 1 2 5");
printf("\r\n");
for (int i=0; i<(10/1+1); i++)
{
for (int j=0; j<(10/2+1); j++)
{
for (int k=0; k<(10/5+1); k++)
{
if (i*1 + j*2 + k*5 == 10)
{
printf("\r\n %-2d %d %d", i, j, k);
}
}
}
}
getchar();
稍作优化:
for (int i=0; i<(10/1+1); i++)
{
for (int j=0; j<((10-i*1)/2+1); j++)
{
for (int k=0; k<((10-i*1-j*2)/5+1); k++)
{
if (i*1 + j*2 + k*5 == 10)
{
printf("\r\n %-2d %d %d", i, j, k);
}
}
}
}
PS:
跳槽到新的公司后,由于研发区不能上网已经很久没来csdn逛了,整天对着芯片的一堆堆寄存器手册真是很晕,感觉VC++编程的一些东西变得有点陌生了,怀念原来做应用程序软件的时候啊;
以后还是要尽量来csdn逛逛,解放一下脑袋,放松放松,尝试一下写写博客,呵,落伍的很啦;
在论坛里看到有人问上述题目,顺便做了发上来,权当博客开篇吧