一道华为的面试题,没答上来,唉

翊麾校尉 2011-09-13 09:27:21
1分2分5分的硬币,组成1角,共有多少种组合。一紧张不知从何做起,就这样完了
...全文
10066 175 打赏 收藏 转发到动态 举报
写回复
用AI写文章
175 条回复
切换为时间正序
请发表友善的回复…
发表回复
gary162 2011-12-05
  • 打赏
  • 举报
回复
其实可以试一下我这一种
public class FindGroup{
StringBuffer sb =new StringBuffer();//定义一个全局变量
public static void main(String[] args){
FindGroup fg = new FindGroup();
fg.findAll(10,0);
}

public void findAll(int x,int y){
if(x-y==0){
System.out.println(sb.toString()+y);
}
if(x-y>0){
if(y!=0){
sb.append(y+"+");//将字符入字符串
}
if(y<=1) //避免组合重复出现
findAll(x-y,1); //递归
if(y<=2)//避免组合重复出现
findAll(x-y,2);//递归
if(y<=5)//避免组合重复出现
findAll(x-y,5);//递归
if(y!=0){
int len = sb.length();
sb.delete(len-2,len);//将字符退出字符串
}
}
}
}
梦境传说 2011-11-22
  • 打赏
  • 举报
回复
楼主去华为面试了。。。怎么样。
sdf2323sdfsd 2011-11-08
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
int i,j,k, cnt,a,b,c,sum;

a = b =c = sum = cnt = 0;
scanf("%d%d%d%d", &a,&b,&c,&sum );

for (i=0;i<=sum;i++)
{
for(j=0;j<=sum;j+=2)
{
for(k=0;k<=sum;k+=5)
{
if ( i+j+k == sum )
{
printf("%d, %d, %d\n",i,j,k);
cnt++;
}
}
}
}
printf("total:%d\n",cnt);

return 0;
}
kissome 2011-10-15
  • 打赏
  • 举报
回复
upupup~~~~~
ChampionLai 2011-10-13
  • 打赏
  • 举报
回复
很简单啊,整数的拆分,呵呵,楼主组合数学没学好00
lnmhfeng 2011-10-13
  • 打赏
  • 举报
回复
要好好学下数学和算法了,头袋一点也不灵活了。
宫庆义 2011-10-13
  • 打赏
  • 举报
回复

[size=30px]// n:钱数,单位:"角"
int f(int n)
{
return 5*n*n+4*n+1;
}

O(1)复杂度
[/size]
宫庆义 2011-10-13
  • 打赏
  • 举报
回复
// n:钱数,单位:"角"
int f(int n)
{
return 5*n*n+4*n+1;
}
students_lcc 2011-09-22
  • 打赏
  • 举报
回复
我是来学习的!数学思维
be_yourself_fan 2011-09-21
  • 打赏
  • 举报
回复
擦~ 引用错地了
be_yourself_fan 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lanxue_1988 的回复:]
应该是10种吧
10 = 5 + 5
5可以分解成3种,5个1,或者2个2+个1再者1个2+3个1
那两个5可以选在分解一个或者分解2个再者不分解
结果等于1(不分解)+1*3(选择一个分解)+3*2(两个都分解)
[/Quote]
借用13楼的观点
#include "iostream.h"
void num_count2();

int main()
{
num_count2();
return 0;
}

void num_count2()
{
int i(0);
int sum(0);
int money=10;
for (i=0;i<=money/5;i++)
{
if ((money-5*i)%2==0)
{
sum+=(money-5*i)/2+1;
}
else
{
sum+=(money-5*i)/2+1;
}
}
cout<<sum<<endl;
}
Olc 2011-09-21
  • 打赏
  • 举报
回复
呵呵, 一道题可以列出这么多的代码真的收益了!
yanggenxing 2011-09-21
  • 打赏
  • 举报
回复
13楼想法不错,赞一个
klozhk 2011-09-20
  • 打赏
  • 举报
回复
错了,,汗

#include <stdio.h>
main ()
{
int bilv;
int one_fen;
int tow_fen;
int five_fen;
int i=0;
for (one_fen=0;one_fen<=10;one_fen++)
{
for (tow_fen=0;tow_fen<=5;(tow_fen++))
{
for (five_fen=0;five_fen<=2;five_fen++)
{
if (one_fen+tow_fen*2+five_fen*5==10)
{


printf ("有%d个一分,有%d个2分,有%d个5分\n",one_fen,tow_fen,five_fen);
i++;
}
}
}
}
printf ("组成10分钱一共有%d种方法\n",i);
}
klozhk 2011-09-20
  • 打赏
  • 举报
回复
#include <stdio.h>
main ()
{
int one_fen;
int tow_fen;
int five_fen;
int i=0;
for (one_fen=0;one_fen<=10;one_fen++)
{
for (tow_fen=0;tow_fen<=5;tow_fen++)
{
for (five_fen=0;five_fen<=2;five_fen++)
{
if (one_fen+tow_fen+five_fen==10)
i++;
}
}
}
printf ("组成10分钱一共有%d种方法\n",i);

貌似不难,不知道对不对.
panmenghaha 2011-09-20
  • 打赏
  • 举报
回复
int a=1;
int b=2;
int c=5;
int sum=10;
int number=0;

for(int i=0;i<=10;i++){//不会超过10个1分的

for(int g=0;g<=5;g++){//不会超过5个两分的

for(int k=0;k<=2;k++){//不会超过2个5分的

if(a*i+b*g+c*k==sum){

number++;
System.out.println("第"+number+"次:"+i+"个"+a+"、"+g+"个"+b+"、"+k+"个"+c);

}

}

}

}

结果:
第1次:0个1、0个2、2个5
第2次:0个1、5个2、0个5
第3次:1个1、2个2、1个5
第4次:2个1、4个2、0个5
第5次:3个1、1个2、1个5
第6次:4个1、3个2、0个5
第7次:5个1、0个2、1个5
第8次:6个1、2个2、0个5
第9次:8个1、1个2、0个5
第10次:10个1、0个2、0个5


一共10次。
leeleewc 2011-09-20
  • 打赏
  • 举报
回复
用for就ok了吧~~~~~~~
堕落的乞讨者 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 151 楼 zhanglingkangk 的回复:]
这个方法有它的局限性。那就是当其中任意两个数确定以后,如果另一个数按照公式求出来未必是整数时就不行了。 还有你为什么要表述成什么以内的奇数。像lz的问题,应该是10以内的偶像,5以内的偶数,0以内的偶数。而此人提出的问题由于确定了z和x以后,令一个数正好是4的倍数,所以依然能用你的方法。确定z以后,一次就是100-6*z以内的偶数,干吗要搞成奇数(虽然偶数和奇数个数一样多,但不是更统一吗)
[/Quote]
我承认遇到特殊数据时可能有局限性(我没有举特例看,但是我觉得依然有办法,只是不再是用奇数偶数个数来表示),可是你说的“像lz的问题,应该是10以内的偶像,5以内的偶数,0以内的偶数。”你确信?自己先看清楚再说吧,难道5、3、1是偶数?呵呵
欣客 2011-09-19
  • 打赏
  • 举报
回复
tsx86的思路耳目一新啊 ,156楼其实也是tsx86的思路。
highfly4008 2011-09-19
  • 打赏
  • 举报
回复
根据母函数和排列组合的关系提供的一种方法:
母函数:f(x) = (1+X+X^2+...)(1+X^2+X^4+...)(1+X^5+X^10+...)
其中X^i表示X的i次方
通过求解f(x)中X^10的系数得到的即为可能组合情况:10
加载更多回复(150)

64,196

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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