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

翊麾校尉 2011-09-13 09:27:21
1分2分5分的硬币,组成1角,共有多少种组合。一紧张不知从何做起,就这样完了
...全文
10442 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)
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 全国计算机等级考试二级教程《Python语言程序设计》(2018年版)被视为针对Python入门者和备考人员的核心学习材料。该资料汇总了教材内的所有编程练习答案,这些答案在Python 3.5.3环境中经过实际执行测试,从而保障了代码的准确性和应用价值。备考人员借助这些答案,能够评估自身的学习进度,并深入理解和熟练掌握Python编程的基础原理与方法。 1. Python基础理论:Python作为一门高级编程语言,因其简明扼要的语法结构和卓越的功能表现而备受推崇。基础内容涵盖了变量、数据种类(例如整型、浮点型、字符串、布尔型、列表、元组、字典、集合)、逻辑控制(比如条件判断if-else,循环控制for、while)、函数的声明及使用、模块的引入等。 2. Python高级应用:Python的进阶内容涉及异常管理(try-except-finally结构),类与实例(面向对象编程的基础,包含类的构造、对象的生成、属性与方法的运用、继承机制、多态表现),装饰器(用于调整函数或类的功能特性),上下文管理器(借助with语句实现资源管理)等。 3. 数据文件处理:Python配备了全面的文件操作功能,涉及文件的开启、数据读写、关闭操作,以及多种操作模式(例如r模式用于读取,w模式用于写入,a模式用于追加内容等)。此外,还包括文本文件与二进制文件的转换处理,以及文件的位置调整、复制和删除等操作。 4. 标准库的运用:Python的标准库资源极为丰富,比如os模块提供操作系统接口,sys模块用于获取系统参数,random模块可用于生成随机数值,datetime模块负责处...

65,213

社区成员

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

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