某大公司面试题,简单,关键是如何速度更快?~~~~~

jiahuafu 2007-11-20 09:39:16
求5元,2元,1元,组合在一起10块钱的可能,程序要最大优化!

for (int i = 0; i <= 5; i++)//2 yuan
{
for (int j = 0; j <= 2; j++)//5 yuan
{
for (int k = 0; k <= 10; k++)//1 yuan
{
if ((i * 2 + j * 5 + k * 1) == 10)
{
printf("%d个2元,%d个5元,%d个1元 = 10\n", i, j, k);
continue; //这里是优化地方,超过10自动回上级循环
}

}

}

}
...全文
1370 71 打赏 收藏 转发到动态 举报
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
夹心饼干 2008-07-14
  • 打赏
  • 举报
回复
楼主弄反了一问题,对嵌套循环的优化原则是循环次数最多的应该放在最里层,依次类推

这样避免了CPU处理的时候不段的跳层次
gaoteng1984 2008-07-13
  • 打赏
  • 举报
回复
直接用汇编,应该会快
gaoteng1984 2008-07-13
  • 打赏
  • 举报
回复
不要用除法,用>>1更好吧
hazuki9902 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 Wolf_FienD 的回复:]
没有最快,只有更加快.


C/C++ code
#include<stdio.h>

void main(void)
{
printf("0个5元, 0个2元, 10个1元 = 10\n\
0个5元, 1个2元, 8个1元 = 10\n\
0个5元, 2个2元, 6个1元 = 10\n\
0个5元, 3个2元, 4个1元 = 10\n\
0个5元, 4个2元, 2个1元 = 10\n\
0个5元, 5个2元, 0个1元 = 10\n\
1个5元, 0个2元, 5个1元 = 10\n\
1个5元, 1个2元, 3个1元 = 10\…
[/Quote]

=====================================================

强烈建议提名最佳恶搞奖,哈哈~
train0714 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 Wolf_FienD 的回复:]
没有最快,只有更加快.


C/C++ code
#include<stdio.h>

void main(void)
{
printf("0个5元, 0个2元, 10个1元 = 10\n\
0个5元, 1个2元, 8个1元 = 10\n\
0个5元, 2个2元, 6个1元 = 10\n\
0个5元, 3个2元, 4个1元 = 10\n\
0个5元, 4个2元, 2个1元 = 10\n\
0个5元, 5个2元, 0个1元 = 10\n\
1个5元, 0个2元, 5个1元 = 10\n\
1个5元, 1个2元, 3个1元 = 10\…
[/Quote]
有想法!
jy01807853 2008-07-13
  • 打赏
  • 举报
回复
[Quote]
void main(void)
{

;/***************************************/;
;/*** ***/;
;/*** 大音希声,大象无形化 ***/;
;/*** ***/;
;/***************************************/;
;/*** ***/;
;/*** 0个5元 + 5个2元 + 0个1元 = 10 ***/;
;/*** 0个5元 + 4个2元 + 2个1元 = 10 ***/;
;/*** 0个5元 + 3个2元 + 4个1元 = 10 ***/;
;/*** 0个5元 + 2个2元 + 6个1元 = 10 ***/;
;/*** 0个5元 + 1个2元 + 8个1元 = 10 ***/;
;/*** 1个5元 + 0个2元 + 5个1元 = 10 ***/;
;/*** 1个5元 + 1个2元 + 3个1元 = 10 ***/;
;/*** 1个5元 + 2个2元 + 1个1元 = 10 ***/;
;/*** 2个5元 + 0个2元 + 0个1元 = 10 ***/;
;/*** 0个5元 + 0个2元 + 10个1元 = 10 ***/;
;/*** ***/;
;/***************************************/;
;/*** ***/;
;/*** 没有最大优化,只有更大优化 ***/;
;/*** ***/;
;/*** 拜拜 ***/;
;/*** ***/;
;/***************************************/;

}
[/Quote]
兄弟其实上我建议你把这些答案直接搞搞成2进制
人比这还快了吧??
呵呵~~~~~~~~~~`
thecorr 2008-07-13
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int vShowNum( int a, int b, int c, int d)
{
int result = 0;
for ( int i = 0; i < d / a; i ++ )
{
for ( int j = 0; j < d - a * i ; j++ )
{
if ( (d - a*i - j*b)%c == 0 )
{
result++;
}
}
}

return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << vShowNum(5, 2, 1, 10) << endl;
return 0;
}
thecorr 2008-07-13
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int vShowNum( int a, int b, int c, int d)
{
int result = 0;
for ( int i = 0; i < d / a; i ++ )
{
for ( int j = 0; j < d - a * i ; j++ )
{
if ( (d - a*i - j*b)%c == 0 )
{
result++;
}
}
}

return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << vShowNum(5, 2, 1, 10) << endl;
return 0;
}
asmst 2008-07-13
  • 打赏
  • 举报
回复
#include <stdio.h>
/*
* 将数量为total的钱分成5元、2元和1元的组合
* 并打印出每种组合
*/
void zuheh(int total)
{
int i5,i2,i1;
for(i5=0;i5<=total;i5+=5)
for(i2=0;i2<=(total-i5);i2+=2){
i1=total-i5-i2;
printf("%d个5元 %d个2元 %d个1元 \n",i5,i2,i1);
}
}
int main()
{
int total;
scanf("%d",&total);
zuhe(total);
return 0;
}
ken547315 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 luxiao_qq 的回复:]
C/C++ code/*求5元,2元,1元,组合在一起10块钱*/#include<stdio.h>voidmain(void)
{
registerintj=0;for( ; j<6;++j)
printf("%d个5元, %d个2元, %d个1元 = 10\n",0, j,10-j-j);for(j=0; j<3;++j)
printf("%d个5元, %d个2元, %d个1元 = 10\n",1, j,5-j-j);
printf("%d个5元, %d个2元, %d个1元 = 10\n",2,0,0);

getchar();
}

没有最快,只有更快
[/Quote]
你刁!!!!!!
wsrs 2008-07-13
  • 打赏
  • 举报
回复
O
yuelin586 2008-07-12
  • 打赏
  • 举报
回复
不错啊~~~
gw6328 2008-07-12
  • 打赏
  • 举报
回复
太牛了
gaoliang0807 2007-11-27
  • 打赏
  • 举报
回复
#include <stdio.h>

void main(void)
{
printf("0个5元, 0个2元, 10个1元 = 10\n\
0个5元, 1个2元, 8个1元 = 10\n\
0个5元, 2个2元, 6个1元 = 10\n\
0个5元, 3个2元, 4个1元 = 10\n\
0个5元, 4个2元, 2个1元 = 10\n\
0个5元, 5个2元, 0个1元 = 10\n\
1个5元, 0个2元, 5个1元 = 10\n\
1个5元, 1个2元, 3个1元 = 10\n\
1个5元, 2个2元, 1个1元 = 10\n\
}

不服不行.~~
piaoliu 2007-11-23
  • 打赏
  • 举报
回复
呵呵
能用脑子算的问题就不要用计算机了
这个公司的题也有问题,要么就来个100
凑10元,幼儿园的数学题也要编程实现吗?
yuanhan530 2007-11-23
  • 打赏
  • 举报
回复
乱了。。。
ttzzgg_80713 2007-11-23
  • 打赏
  • 举报
回复
俺为什么要鄙视楼上的呢。因为你木有顶Mlee79.
为什么鄙视Mlee79呢。俺观察此人久矣。长期搞C的人突然冒出来搞模板,还要折腾编译器。取个名字也猬琐。函数名不是slove就是foobar.都是酱紫的。。。。巨顶。
ttzzgg_80713 2007-11-23
  • 打赏
  • 举报
回复
BS楼上的和mlee79
lbaby 2007-11-23
  • 打赏
  • 举报
回复
无聊来BS一下某人的折磨机器的无聊模板...
luxiao_qq 2007-11-22
  • 打赏
  • 举报
回复
“某大公司面试题,简单,关键是如何速度更快?~~~~~”

--------------------------------------------------------------

如果我没看错的话,题目简单,条件要求是“关键是如何速度更快”,“程序要最大优化”

并不需要可移植性,可重用性,也不需要面向对象的代码

我相信达到“程序速度的最大优化”,一般都是让CPU欣赏的

===========================================================

i, j, k三个变量分别代表5元、2元、1元

i(即5元)最少是0个, 最多是2个
j(即2元)最少是0个, 最多是5个
k(即1元)最少是0个,最多是10个,可通过10元-i*5元-j*2元得到

当优化1元的时候,已经经过大脑计算了
k*1元=10元-i*5元-j*2元
(类似于有些书上优化百钱买百鸡例子的方法)

当i=0时,k=10-i*5-j*2可优化为k=10-j*2, 为了优化速度,改成k=10-j-j
当i=1时,k=10-5-j*2可优化为k=5-j*2,为了优化速度, 改成k=5-j-j
当i=2时,i*5==10,j和k不需要计算

为了优化速度, k用10元-i*5元-j*2元代替
为了优化速度, i直接用常量代替

第一个循环是当i(即5元)是0个的情况
第二个循环是当i(即5元)是1个的情况
当i=2时,i*5==10,j和k根本不需要计算

===============================================================

如果说必需要每种情况都要比较的话,我觉得只需把楼主程序中的continue; 这一句去掉就行了

如果说需要可移植性,可重用性,面向对象的代码,那么我承认我的是错了

如果说按“某大公司面试题,简单,关键是如何速度更快?~~~~~” “关键是如何速度更快”,“程序要最大优化”,那么我就没有错

还没请教怎么样才算是速度优化

还没请教怎么样才算是速度优化

还没请教怎么样才算是速度优化

欢迎来指正,先谢了
加载更多回复(51)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧