金山笔试题目

时间:2022-03-30 14:40:44
将1 2 5 10 20 50分等6种大小货币各若干(最多为10个),可以组成多少种数量货币
比如1,2,5各一个,10,20,50各0个,可以组成
1,2,3,5,6,7,8

小弟我只会用循环做,大家有没有其他的方法啊??说一下。

39 个解决方案

#1


最多可以(1+2+5+10+20+50)*10=880种

#2


动态规划

#3


请问动态规划怎么用程序实现

#4


关注下.

#5


应该是880种。

#6


从1~880之间的任何一个数都可以组合!

#7


不可能是880种吧

#8


最大880,可以881种啊

#9


不是880种吧。里面有重复的也有没计算上的啊,一个二分和两个一分值是一样的,期待答案。

#10


应该是881种,讲一下偶的解题思路:
1分货币可以组成:0-10
2分货币可以组成:2,4,6,……20
5分货币可以组成:5,10,15,……50
10分货币可以组成:10,20,30,……100
20分货币可以组成:20,40,60,……200
50分货币可以组成:50,100,150,……500

我们把货币的组成看做形成一个数的过程:那么这个数可以有百位,十位,个位(对这题而言)
1分货币能够满足所有各位的需求。
10分货币能够满足所有十位的需求。
如果不算2分和5分,我们可以看到百位可以取0-7以内的任意数
在不计2分和5分的情况下:这个数可以组成0-810以内的任何数。
计算2分和5分后,那么百位为8,十位可以取1-7以内的任意数。
所以最后的答案应该是881种(加一个全0的情况)。

#11


阿里巴巴的笔试题也有..不过好像简单点..而且填空回答的编程题..

#12


三楼说动态规划的朋友 分析一下吧 

我不怎么了解动态规划

#13


关注中。。。

#14


留名

#15


不明白
楼上的给说下!
fuyang_ywf() 
你说的我想的头有点晕了!
回去想想吧!

#16


大致说一下:
利用a[i] == 1表示币值为i可以组合出来,当然a数组初始化为0。
我们先假设每种币值只有一个,

初始化a为0
max = b;
a[b] = 1;//这里的b为币值中最小的那个数,按照楼主的例子那就是1了
for(每个币值b,即例子中的1,2,5)//这里要去掉第一个了,应为上面已经赋值了
{
    for(j =max; j>=0; j++)
    {
        if(a[j] == 1)
        {
          a[j+b] = 1;
          if(j+b > max) max = j+b;
        }
    }
}
然后循环a数组,如果值为1,则表示该币值可以组合出来,由于先假设每种币值只有一个,如果有多个的话,那么第二重循环就做多遍就行了.

#17


880的,881的兄弟们请仔细看清楚题目,瀑布汗

#18


将1 2 5 10 20 50分等6种大小货币各若干(最多为10个)
…………

楼上的讲讲
这句话是什么意思

我可以理解成,每种货币最多有10个,这样的话,能组成880个面值的货币
我也可以理解成,每种货币数量不一样,最多为10个,那样的话,我不知道怎么计算,因为每种货币数量不确定
我还可以理解成,所有货币的数量加起来一共10个,那样的话,根据不同的单个货币数量分配,有不同的结果

你说该怎么理解了

#19


复杂

#20


呵呵,看到880/881的答案,才知道自己还不算太近视

#21


vinegar111(), 我的理解是你说的第二种理解,就是写这样一个方法萨
// a1为1分的个数,以此类推
int answer(int a1, int a2, int a5, int a10, int a20, int a50) {
    int answer=0;
    …………
    return answer;
}

#22


最多可以(1+2+5+10+20+50)*10=880种 是怎么得来的呀?可否解释一二?

#23


880种,应该多了一些吧,题目中明确指出--可以组成多少种数量货币
难道你用1分货币组成的4分货币,和用2分货币组成的4分货币不是同一种数量货币吗?
这个应该用排列组合的方法来计算的吧!
以上说法,纯属个人意见。

#24


我也是认为0~880共881种数量货币啊!
关注……

#25


tootball() ( )

880种,应该多了一些吧,题目中明确指出--可以组成多少种数量货币
难道你用1分货币组成的4分货币,和用2分货币组成的4分货币不是同一种数量货币吗?
这个应该用排列组合的方法来计算的吧!
以上说法,纯属个人意见。

  
 
用1分货币组成的4分货币,和用2分货币组成的4分货币是同一种数量货币
880种的意思是,1  2 5 10 20 50分等6种大小货币各10个
可以组成从1-880分中间的任何一个分数。那当然是880了

#26


好复杂啊
 头都大了

#27


题目是说最多有10个,这个理解还有二义性,就象上面有人提问的那样,希望楼主解释.
我们把它理解成每种货币最多10个理解.那说有880中的朋友,你们计算的是从6个货币中最少选择一个1分的一个,题目又没有说最少选择几个货币,为什么不考虑0在内那?我可以一个币种都不选择啊!
关注答案^_^

#28


最多10个硬币的方法,从0开始算起,405个

#include <iostream.h>
#include <memory.h>
int main()
{
int fen[6]={1,2,5,10,20,50};
int result[510];
int temp[510];
memset(result,0,sizeof(result));
memset(temp,0,sizeof(temp));

result[0]=1;
for(int j=0; j<10;j++)
{
memset(temp,0,sizeof(temp));
for(int k=0; k<510;k++)
{
for(int i=0; i<6;i++)
{
if(result[k]!=0)  temp[fen[i]+k]++;
}
}
for( k=0; k<510;k++)
{
if(temp[k]!=0)
{
result[k]=1;
}
}
}

int cnt =0;
for(int k=0; k<510;k++)
{
if(result[k]!=0){cnt++;}
}
cout<<cnt<<endl;
return 0;
}

#29


那LZ用循环做看看,能不能搞出来

#30


我觉得这个估计一下就知道了
关键是找出一个最大极限,最大极限就是全部加起来能有多少分:
总分数=1*10+2*10+5*10+10*10+20*10+50*10=880分
在加上有点常识的都知道,人民币的数值是为了满足所有数值的,不存在中间断的。

#31


同意上面的

#32


同意
881种。

#33


不同意881种
人家不是挖字眼,而应该是实际问题
要是实际问题你搞出来个0的那种,我估计人家会认为你不适合解决实际问题了
呵呵,以上为个人观点

#34


mark..

#35


低价转让本人学习JAVA系列的培训资料,详细介绍如下,后面有联系方式,需要的请速联系。
一、 JAVA基础培训
1. 孙鑫Java无难事(共108集)
本套光盘由孙鑫老师亲自授课录制。内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手。
2. 张孝祥Java就业培训(共56集)
本套教学光盘深入浅出的理论分析、精练生动的案例讲解、亲切直观的操作界面、恍然大悟的学习收获。张孝祥老师的课程,就不用多说了。
3. 翁凯Java语言视频培训(共30集)
        本视频教学是由浙江大学著名年轻计算机专家翁恺教授主讲,一共30集,讲得很好,从JAVA的基础讲起,由浅入深,绝对是精品。看本视频讲座最好是有一点c++的底子
二、 JAVA进阶培训
1. 赛迪网校J2EE软件工程师培训(J2EE基础13集  高级17集  案例7集)
       本课程包括J2EE的各个主要方面,以及开发环境,设计模式,和经典案例分析等实用内容。通过本课程的学习,学员将具有J2EE开发的扎实理论基础和实际设计经验,可胜任企业级应用的设计和开发等实际工作。本课程共计约40课时。授课教师均是来自主流J2EE厂商并具有J2EE 5年以上开发和咨询经验的技术专家。
2. J2EE Web程序开发(共38集)
国内最知名的J2EE讲师刘晓涛讲师执教,课程生动形象并结合典型企业案例深入的分析。从零开始:该课程以零基础为起点,强调基础理论结合实际;以基础理论课程为第一阶段,到常用工具使用及工作应用为提高部分。专业性强:多平台软件开发(Windows/Linux) ;紧跟先进的技术(极限编程/测试驱动开发);规范化(学习印度软件经验);不仅仅是编程,在教学过程当中渗透设计思想;编程思想的熏陶,打通任督二脉,对编程语言一通百通;软件工程思想的灌输(分析,设计,实现,测试一条龙)。
三、 JAVA实战项目培训录像
该培训录像是北京尚学堂科技第一个项目(聊天系统)和 第二个项目(坦克大战)的课堂实录,马士兵老师以手把手一行一行代码的形式教大家如何开发一个示例性Chat和一个相当完备的TankWar游戏,详尽透彻的解释了j2se的常用知识,只要按照教程中的操作一步一步完成,你就足以掌握j2se/eclipse到能够进一步学习的水平了,项目实战,不容错过!
四、 Oracle 9i 大型视频培训录像(共64集,13.4G)
    *1Z0-007 Introduction to Oracle9i SQL 
*1Z0-031 Oracle9i DBA Fundamentals I 
*1Z0-032 Oracle9i DBA Fundamentals II 
*1Z0-033 Oracle9i Performance Tuning
    另附全套PPT培训讲稿。

联系方式:
QQ:421130479
MSN:njlaoshi@hotmail.com
Tel:13512510369(短信佳)
E-mail:njlaoshi@hotmail.com

#36


不算0就是792
算0是793
void calc()
{
int fen[6]={1,2,5,10,20,50};
int result[881];
int temp[881];
memset(result,0,sizeof(result));
memset(temp,0,sizeof(temp));
result[0]=1;
for(int i=0; i<6; i++)
{
memset(temp,0,sizeof(temp));
for(int k=0;k<881;k++)
{
for(int j=1; j<10;j++)
{
if(result[k]!=0)
{
assert(k+fen[i]*j<=880);
temp[k+fen[i]*j]=1;
}
}
}
for( k=0; k<880;k++)
{
if(temp[k]!=0)
{
result[k]=1;
}
}
}
int cnt =0;
for(int k=0; k<881;k++)
{
if(result[k]!=0){cnt++;}
}
cout<<cnt<<endl;
}

#37


嗯,少算了一次。应该是880

#38



我觉得这个估计一下就知道了
关键是找出一个最大极限,最大极限就是全部加起来能有多少分:
总分数=1*10+2*10+5*10+10*10+20*10+50*10=880分
在加上有点常识的都知道,人民币的数值是为了满足所有数值的,不存在中间断的。

---------------------------------------------------------
同意,若每种都是十个的话,总分数是880,然后从中开始减,因为有十个一分的,故中间不会出现断点.

#39


呵呵
这个题目唉

#1


最多可以(1+2+5+10+20+50)*10=880种

#2


动态规划

#3


请问动态规划怎么用程序实现

#4


关注下.

#5


应该是880种。

#6


从1~880之间的任何一个数都可以组合!

#7


不可能是880种吧

#8


最大880,可以881种啊

#9


不是880种吧。里面有重复的也有没计算上的啊,一个二分和两个一分值是一样的,期待答案。

#10


应该是881种,讲一下偶的解题思路:
1分货币可以组成:0-10
2分货币可以组成:2,4,6,……20
5分货币可以组成:5,10,15,……50
10分货币可以组成:10,20,30,……100
20分货币可以组成:20,40,60,……200
50分货币可以组成:50,100,150,……500

我们把货币的组成看做形成一个数的过程:那么这个数可以有百位,十位,个位(对这题而言)
1分货币能够满足所有各位的需求。
10分货币能够满足所有十位的需求。
如果不算2分和5分,我们可以看到百位可以取0-7以内的任意数
在不计2分和5分的情况下:这个数可以组成0-810以内的任何数。
计算2分和5分后,那么百位为8,十位可以取1-7以内的任意数。
所以最后的答案应该是881种(加一个全0的情况)。

#11


阿里巴巴的笔试题也有..不过好像简单点..而且填空回答的编程题..

#12


三楼说动态规划的朋友 分析一下吧 

我不怎么了解动态规划

#13


关注中。。。

#14


留名

#15


不明白
楼上的给说下!
fuyang_ywf() 
你说的我想的头有点晕了!
回去想想吧!

#16


大致说一下:
利用a[i] == 1表示币值为i可以组合出来,当然a数组初始化为0。
我们先假设每种币值只有一个,

初始化a为0
max = b;
a[b] = 1;//这里的b为币值中最小的那个数,按照楼主的例子那就是1了
for(每个币值b,即例子中的1,2,5)//这里要去掉第一个了,应为上面已经赋值了
{
    for(j =max; j>=0; j++)
    {
        if(a[j] == 1)
        {
          a[j+b] = 1;
          if(j+b > max) max = j+b;
        }
    }
}
然后循环a数组,如果值为1,则表示该币值可以组合出来,由于先假设每种币值只有一个,如果有多个的话,那么第二重循环就做多遍就行了.

#17


880的,881的兄弟们请仔细看清楚题目,瀑布汗

#18


将1 2 5 10 20 50分等6种大小货币各若干(最多为10个)
…………

楼上的讲讲
这句话是什么意思

我可以理解成,每种货币最多有10个,这样的话,能组成880个面值的货币
我也可以理解成,每种货币数量不一样,最多为10个,那样的话,我不知道怎么计算,因为每种货币数量不确定
我还可以理解成,所有货币的数量加起来一共10个,那样的话,根据不同的单个货币数量分配,有不同的结果

你说该怎么理解了

#19


复杂

#20


呵呵,看到880/881的答案,才知道自己还不算太近视

#21


vinegar111(), 我的理解是你说的第二种理解,就是写这样一个方法萨
// a1为1分的个数,以此类推
int answer(int a1, int a2, int a5, int a10, int a20, int a50) {
    int answer=0;
    …………
    return answer;
}

#22


最多可以(1+2+5+10+20+50)*10=880种 是怎么得来的呀?可否解释一二?

#23


880种,应该多了一些吧,题目中明确指出--可以组成多少种数量货币
难道你用1分货币组成的4分货币,和用2分货币组成的4分货币不是同一种数量货币吗?
这个应该用排列组合的方法来计算的吧!
以上说法,纯属个人意见。

#24


我也是认为0~880共881种数量货币啊!
关注……

#25


tootball() ( )

880种,应该多了一些吧,题目中明确指出--可以组成多少种数量货币
难道你用1分货币组成的4分货币,和用2分货币组成的4分货币不是同一种数量货币吗?
这个应该用排列组合的方法来计算的吧!
以上说法,纯属个人意见。

  
 
用1分货币组成的4分货币,和用2分货币组成的4分货币是同一种数量货币
880种的意思是,1  2 5 10 20 50分等6种大小货币各10个
可以组成从1-880分中间的任何一个分数。那当然是880了

#26


好复杂啊
 头都大了

#27


题目是说最多有10个,这个理解还有二义性,就象上面有人提问的那样,希望楼主解释.
我们把它理解成每种货币最多10个理解.那说有880中的朋友,你们计算的是从6个货币中最少选择一个1分的一个,题目又没有说最少选择几个货币,为什么不考虑0在内那?我可以一个币种都不选择啊!
关注答案^_^

#28


最多10个硬币的方法,从0开始算起,405个

#include <iostream.h>
#include <memory.h>
int main()
{
int fen[6]={1,2,5,10,20,50};
int result[510];
int temp[510];
memset(result,0,sizeof(result));
memset(temp,0,sizeof(temp));

result[0]=1;
for(int j=0; j<10;j++)
{
memset(temp,0,sizeof(temp));
for(int k=0; k<510;k++)
{
for(int i=0; i<6;i++)
{
if(result[k]!=0)  temp[fen[i]+k]++;
}
}
for( k=0; k<510;k++)
{
if(temp[k]!=0)
{
result[k]=1;
}
}
}

int cnt =0;
for(int k=0; k<510;k++)
{
if(result[k]!=0){cnt++;}
}
cout<<cnt<<endl;
return 0;
}

#29


那LZ用循环做看看,能不能搞出来

#30


我觉得这个估计一下就知道了
关键是找出一个最大极限,最大极限就是全部加起来能有多少分:
总分数=1*10+2*10+5*10+10*10+20*10+50*10=880分
在加上有点常识的都知道,人民币的数值是为了满足所有数值的,不存在中间断的。

#31


同意上面的

#32


同意
881种。

#33


不同意881种
人家不是挖字眼,而应该是实际问题
要是实际问题你搞出来个0的那种,我估计人家会认为你不适合解决实际问题了
呵呵,以上为个人观点

#34


mark..

#35


低价转让本人学习JAVA系列的培训资料,详细介绍如下,后面有联系方式,需要的请速联系。
一、 JAVA基础培训
1. 孙鑫Java无难事(共108集)
本套光盘由孙鑫老师亲自授课录制。内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手。
2. 张孝祥Java就业培训(共56集)
本套教学光盘深入浅出的理论分析、精练生动的案例讲解、亲切直观的操作界面、恍然大悟的学习收获。张孝祥老师的课程,就不用多说了。
3. 翁凯Java语言视频培训(共30集)
        本视频教学是由浙江大学著名年轻计算机专家翁恺教授主讲,一共30集,讲得很好,从JAVA的基础讲起,由浅入深,绝对是精品。看本视频讲座最好是有一点c++的底子
二、 JAVA进阶培训
1. 赛迪网校J2EE软件工程师培训(J2EE基础13集  高级17集  案例7集)
       本课程包括J2EE的各个主要方面,以及开发环境,设计模式,和经典案例分析等实用内容。通过本课程的学习,学员将具有J2EE开发的扎实理论基础和实际设计经验,可胜任企业级应用的设计和开发等实际工作。本课程共计约40课时。授课教师均是来自主流J2EE厂商并具有J2EE 5年以上开发和咨询经验的技术专家。
2. J2EE Web程序开发(共38集)
国内最知名的J2EE讲师刘晓涛讲师执教,课程生动形象并结合典型企业案例深入的分析。从零开始:该课程以零基础为起点,强调基础理论结合实际;以基础理论课程为第一阶段,到常用工具使用及工作应用为提高部分。专业性强:多平台软件开发(Windows/Linux) ;紧跟先进的技术(极限编程/测试驱动开发);规范化(学习印度软件经验);不仅仅是编程,在教学过程当中渗透设计思想;编程思想的熏陶,打通任督二脉,对编程语言一通百通;软件工程思想的灌输(分析,设计,实现,测试一条龙)。
三、 JAVA实战项目培训录像
该培训录像是北京尚学堂科技第一个项目(聊天系统)和 第二个项目(坦克大战)的课堂实录,马士兵老师以手把手一行一行代码的形式教大家如何开发一个示例性Chat和一个相当完备的TankWar游戏,详尽透彻的解释了j2se的常用知识,只要按照教程中的操作一步一步完成,你就足以掌握j2se/eclipse到能够进一步学习的水平了,项目实战,不容错过!
四、 Oracle 9i 大型视频培训录像(共64集,13.4G)
    *1Z0-007 Introduction to Oracle9i SQL 
*1Z0-031 Oracle9i DBA Fundamentals I 
*1Z0-032 Oracle9i DBA Fundamentals II 
*1Z0-033 Oracle9i Performance Tuning
    另附全套PPT培训讲稿。

联系方式:
QQ:421130479
MSN:njlaoshi@hotmail.com
Tel:13512510369(短信佳)
E-mail:njlaoshi@hotmail.com

#36


不算0就是792
算0是793
void calc()
{
int fen[6]={1,2,5,10,20,50};
int result[881];
int temp[881];
memset(result,0,sizeof(result));
memset(temp,0,sizeof(temp));
result[0]=1;
for(int i=0; i<6; i++)
{
memset(temp,0,sizeof(temp));
for(int k=0;k<881;k++)
{
for(int j=1; j<10;j++)
{
if(result[k]!=0)
{
assert(k+fen[i]*j<=880);
temp[k+fen[i]*j]=1;
}
}
}
for( k=0; k<880;k++)
{
if(temp[k]!=0)
{
result[k]=1;
}
}
}
int cnt =0;
for(int k=0; k<881;k++)
{
if(result[k]!=0){cnt++;}
}
cout<<cnt<<endl;
}

#37


嗯,少算了一次。应该是880

#38



我觉得这个估计一下就知道了
关键是找出一个最大极限,最大极限就是全部加起来能有多少分:
总分数=1*10+2*10+5*10+10*10+20*10+50*10=880分
在加上有点常识的都知道,人民币的数值是为了满足所有数值的,不存在中间断的。

---------------------------------------------------------
同意,若每种都是十个的话,总分数是880,然后从中开始减,因为有十个一分的,故中间不会出现断点.

#39


呵呵
这个题目唉