一道谷歌面试题,求正解!

SexyCode
博客专家认证
2015-06-11 04:46:48

题目如图所示
这道题作为笔试题,个人觉得考查的不是程序,而是数学功底

下面是我的解答,主要使用了组合、插空法

首先让x都取比自身的最小值小1,
X1=1 x2=-1 x3=-4 x4=7
X全部相加=3
所以还需要加上27才能=30
问题转换为需要将27分为4份,采用插空法,即在27+1个位置插入3个隔板,但是由于每个数至少为1,所以最左最右两个地方不可以插入隔板,所以只有27+1-2=26个位置
所以答案是C(3,26)=2600

问题来了,没有选项答案是2600

是我算错了?
求大神解答!!!
...全文
479 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
c782699991 2017-11-16
  • 打赏
  • 举报
回复
E次奥 2015-06-12
  • 打赏
  • 举报
回复
x1+x2+x3+x4=30 x(1+2+3+4)=30 x=30/10=3 30-3=27 27有28个空位 C(28,3) 不知道是不是这么算的
kingz89 2015-06-12
  • 打赏
  • 举报
回复
首先让x都取比自身的最小值小1, 你的x3错了 应该是-6才对 比-5小1的数字是-6不是-4 然后就是C(3, 28)了 你的思路对了 就是粗心了些
SexyCode 2015-06-12
  • 打赏
  • 举报
回复
引用 3 楼 kingz89 的回复:
首先让x都取比自身的最小值小1, 你的x3错了 应该是-6才对 比-5小1的数字是-6不是-4 然后就是C(3, 28)了 你的思路对了 就是粗心了些
原来如此明白了
falloutmx 2015-06-12
  • 打赏
  • 举报
回复

	for(i=0;i<=25;++i)
		for(j=25-i;j>=0;--j)
			for(k=25-i-j;k>=0;--k)
					++z;
SexyCode 2015-06-11
  • 打赏
  • 举报
回复
引用 1 楼 sxc9870 的回复:
答案是A double a=2,b=0,c=-5,d=8; int count=0; for( double maxA=30-b-c-d;maxA>=a;maxA--){ for( double maxB=30-a-c-d;maxB>=b;maxB--){ for( double maxC=30-b-a-d;maxC>=c;maxC--){ for( double maxD=3030-a-c-b;maxD>=d;maxD--){ if(maxA+maxB+maxC+maxD==30)count++; } } } }
首先谢谢回答,编程辛苦了!看来答案是A 但是这是笔试题,没得编程,只能考自己算。 所以我想知道怎样用数学方法求解,以及我的方法哪里错了
sxc9870 2015-06-11
  • 打赏
  • 举报
回复
答案是A double a=2,b=0,c=-5,d=8; int count=0; for( double maxA=30-b-c-d;maxA>=a;maxA--){ for( double maxB=30-a-c-d;maxB>=b;maxB--){ for( double maxC=30-b-a-d;maxC>=c;maxC--){ for( double maxD=3030-a-c-b;maxD>=d;maxD--){ if(maxA+maxB+maxC+maxD==30)count++; } } } }

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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