传说中的华为面试问题

massfish 2005-10-30 07:57:39
射击运动员10发打中90环有多少种可能,请编写程序计算出来有多少种可能,并打印出结果,0环和10环均有效

各位有啥高见?

...全文
1506 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
zupkfa 2005-11-17
  • 打赏
  • 举报
回复
看错了一样!!!
zupkfa 2005-11-17
  • 打赏
  • 举报
回复
laoren_80(老车站) 算出的答案怎么和前面几位大哥

的不一样啊.看起来没有错啊
deping_chen 2005-11-17
  • 打赏
  • 举报
回复
看了一下hbd321(hbd)的代码,hbd321(hbd)的解法应该是正确的,正确运用了加法原理。
yjy1001 2005-11-17
  • 打赏
  • 举报
回复
楼上的可以
laoren_80 2005-11-15
  • 打赏
  • 举报
回复
大家看看这样行不行

main()
{int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;
long n=0;
for(a0=0;a0<11;a0++)
for(a1=0;a1<11;a1++)
for(a2=0;a2<11;a2++)
for(a3=0;a3<11;a3++)
for(a4=0;a4<11;a4++)
for(a5=0;a5<11;a5++)
for(a6=0;a6<11;a6++)
for(a7=0;a7<11;a7++)
for(a8=0;a8<11;a8++)
for(a9=0;a9<11;a9++)
if(a0+a1+a2+a3+a4+a5+a6+a7+a8+a9==90)
{n++;
continue;
}
printf("%d\n",n);
}
laoren_80 2005-11-12
  • 打赏
  • 举报
回复
递归调用可能行
没时间调
有兴趣的可以实施
2004csharp 2005-11-10
  • 打赏
  • 举报
回复
回朔法
jinyongzhi 2005-11-10
  • 打赏
  • 举报
回复
这种问题还是递归比较好算,主要是逻辑清晰,我算的也是92378

int fire(int n, int num)
{
if ((num>n*10)||(num<0)||(n<1))
return 0;
if (n==1)
return 1;
else
{
int m = 0;
for (int i=0; i<=10; i++)
m += fire(n-1, num-i);
return m;
}
}
ascmvi 2005-11-07
  • 打赏
  • 举报
回复
mark
deping_chen 2005-11-07
  • 打赏
  • 举报
回复
james_lover(草古) 的思路不错,但是重复情况没有考虑。实际上也不可行。
deping_chen 2005-11-07
  • 打赏
  • 举报
回复
或者说是求方程
x1 + x2 + ... + x10 = 90
的解的个数,xi是0到10的自然数
deping_chen 2005-11-07
  • 打赏
  • 举报
回复
感觉是个数学问题。
1.首先把90分解成由0到10的数组成的非减序列。
比如:
0 10 10 10 10 10 10 10 10 10

1 9 10 10 10 10 10 10 10 10
2 9 9 10 10 10 10 10 10 10
3 9 9 9 10 10 10 10 10 10
...
9 9 9 9 9 9 9 9 9 9(这是最后一个数是9的唯一可能,最后一个数不可能小于9)

2 8 10 10 10 10 10 10 10 10
4 8 8 10 10 10 10 10 10 10
6 8 8 8 10 10 10 10 10 10
8 8 8 8 8 10 10 10 10 10

...

5 5 10 10 10 10 10 10 10 10

...

2.对每一个序列求多重集的排列数(可以查公式)。其总和就是所有的可能数。
anranxon 2005-11-07
  • 打赏
  • 举报
回复
有想法
thuers 2005-11-07
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
int sum;
int store[10];
void Output()
{
for(int i = 9; i>=0; --i)
{
cout<<store[i]<<" ";
}
cout<<endl;
++sum;
}

void Cumput(int score, int num)
{
if(score < 0 || score > (num+1)*10 ) //次数num为0到9
return;
if(num == 0)
{
store[num] = score;
Output();
return;
}
for(int i = 0; i <= 10; ++i)
{
store[num] = i;
Cumput(score - i, num - 1);
}
}

int main(int argc, char* argv[])
{
Cumput(90, 9);
cout<<"总数:"<<sum<<endl;
return 0;
}
csufuyi 2005-11-06
  • 打赏
  • 举报
回复
看了几种实现方案, hbd321(hbd) 提出的是最简洁的方法,体现了分治法和递归的思想,是出题者考查的本意,顶!
james_lover(草古)的做法是整数划分的提法,但没有考虑n多的重复情况。
wrothnpc 2005-11-06
  • 打赏
  • 举报
回复
就是C(19,9)
int a[10];
void main()
{
int i = 1, sum = 0, count=0, flag = 0;
while (i > 0) {
if (!flag) {
a[i] = sum+10*i;
sum -= a[i++];
if (i == 10)
flag = 1;
}
else {
if (i == 10)
count ++;
sum += a[--i];
if (a[i-1] != 10)
{
flag = 0;
a[i-1] ++;
sum --;
}
}
}
printf("total: %d\n", count);
}
李黄河 2005-11-06
  • 打赏
  • 举报
回复
看看我的想法有什么问题怎么答案不一样??
这个题可以看成(0---10)10个数相加等于90,即:
X1+X2+X3+...+X10 = 90 (0<=Xn<=10)
即:(10-Y1)+(10-Y2)+....+(10-Y10)=90 (0<=Yn<=10)
==> Y1+Y2+Y3+...+Y10 = 10
现有10个1,分别放在Y1 -- Y10 这10个位置,并可重复放置。即:
第1个1,有10 种放法。
第二个1,有10种放法。
....
第十个1 ,也有10种放法。
得出答案为 10 的10次幂。
Bobby136 2005-10-31
  • 打赏
  • 举报
回复
更正一下,92378种

int aaa[10]={10,10,10,10,10,10,10,10,10,10};
int max_count=0;

void count(int n,int m)
{
if(m==0)
{
max_count++;
for(int i=0;i<10;i++)
{
cout<<aaa[i]<<"\t";
}
cout<<endl;
return;

}
else
{
for(int i=0;i<=10;i++)
{
aaa[n]-=i;
m-=i;
if(m>=0&&n<10)
{
count(n+1,m);
}
aaa[n]+=i;
m+=i;
}
}


}


int main()
{
count(0,10);
cout<<max_count<<endl;
return 0;
}
Bobby136 2005-10-31
  • 打赏
  • 举报
回复
我的结果是92368种

int aaa[10]={10,10,10,10,10,10,10,10,10,10};
int max_count=0;

void count(int n,int m)
{
if(m==0)
{
max_count++;
for(int i=0;i<10;i++)
{
cout<<aaa[i]<<"\t";
}
cout<<endl;
return;

}
else
{
for(int i=0;i<10;i++)
{
aaa[n]-=i;
m-=i;
if(m>=0&&n<10)
{
count(n+1,m);
}
aaa[n]+=i;
m+=i;
}
}


}


int main()
{
count(0,10);
cout<<max_count<<endl;
return 0;
}
hlq2p 2005-10-31
  • 打赏
  • 举报
回复
用比较笨的算法算出的答案和 hbd321(hbd) 一样
结果是92378
加载更多回复(19)

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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