您的位置:首页 > 职场人生

一道实习生面试题

2011-11-19 18:13 169 查看
大概是今年的时候, 公司招聘实习生。我被安排阅卷。

当时被一道算法题难住了。 所有阅卷的人, 都觉得这道题很难做, 并且都没有看懂答案。

后来和出题的人沟通, 才懂了要领。 后来用动态规划写了一下这道题。

这道题, 大概的意思是:

有m的鸡蛋, n个篮子, m>=n. 问有多少种方法, 是的每一种方法, 对认识的自然数k<=m, 都能从n个篮子中, 选出f个篮子, 是的f个篮子的鸡蛋总数=k

贴上代码:

define EGG 60 #define BUCKET 10#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std;void print(int (*m)[EGG+1][EGG+1]){ for(int i = 0; i < BUCKET; i++) { cout<<"\n\n*i=="<<i; for(int j = 0; j <= EGG; j++) { cout<<endl; for(int w = 0; w <= EGG; w++) cout<<m[i][j][w]<<" "; } }}void algo(){ int m[BUCKET][EGG+1][EGG+1]; memset(m, 0, sizeof(int) * (BUCKET * (EGG + 1) * (EGG + 1)) ); m[0][1][1] = 1; for(int i = 1; i < BUCKET; i++) for(int j = 1; j <= EGG; j++) { for(int w = 1; w <= j; w++) { int lastsum = j - w; for(int z = 1; z <= lastsum ; z ++) { if(w >= z && w <= lastsum+1)

m[i][j][w] += m[i-1][j-w][z]; } } } int sum = 0; for(int i = 1; i <= EGG ; i++) sum += m[BUCKET-1][EGG][i]; cout<<"\nsum is :"<<sum<<endl;}int main(){ algo();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: