- 论坛徽章:
- 0
|
原帖由 liuke432 于 2007-3-23 22:29 发表
1 2 5三个数相加等于1000,共有多少种情况?
要求行数。
写了一个三行的
for(i=1;i<500;i++)
for(j=1;j<200;j++)
if((i*2+j*5)<1000)count++;
面试官说可以两行实现,请各位高手指 ...
从上面的代码可以看出题目的要求是"1" ,"2","5"分别至少要有 1 个
所以我们的代码可以这样写
- // a c 可以为"2","5"任何一个
- // b=1
- // 原来的考虑有点欠缺
- // 1 是很特殊的数字。任何正整数都可以用多个1相加得到
- // so b must be 1
- // ok?
- // 但 a,b,c 不能相等
- for(i = a ; i<1000 ; i+=a) //i=a是保证至少有一个a
- count += (1000-i-b) /c; //减去b是保证至少有一个b
- //除以c则反映出a,b组成1000-i的b,c合法组数
复制代码
或者下面这样的代码也可以
但不如上面的好
- // a,c=2,5 or a,c=5,2
- b=1
- for(i = 1 ; i<1000/a ; i++)
- count += (1000 - i*a -b) /c;
复制代码
比如a=5 b=1 c=2就成了我上面的一个帖子代码
见13楼
原帖由 njmarshal 于 2007-3-26 02:14 发表
- for(i=1;i<200;i++)
- count+=(int)((1000-5*i-1)/2);
复制代码
其实这里因为是 整数除法 所以强制转换 (int) 可以不要
[ 本帖最后由 njmarshal 于 2007-3-26 17:40 编辑 ] |
|