淘宝面试题

来源:互联网 发布:淘宝贷款80万还不上 编辑:程序博客网 时间:2024/05/17 02:30

N个鸡蛋放到M个篮子中,篮子不能为空,要满足:对任意不大于N的数量,能用若干个篮子中鸡蛋的和表示。

写出函数,对输入整数N和M,输出所有可能的鸡蛋的放法。

蛮力法

<pre name="code" class="cpp">// PackEgg.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"#define MAX 10int N;int M;//篮子数int basket[MAX]={0};bool checkSum(){int i,j,k;for (i = 1; i <= N; i++){k = M;j = 1;while(j < k){if ((basket[j] + basket[k]) == i)break;if ((basket[j] + basket[k]) > i)k--;elsej++;}}return true;}void PackEgg(int n, int m)  //n个鸡蛋第m个篮子{int i;if (m == M && n >=basket[m-1]){basket[m] = n;if (checkSum()){for(int i = 1; i <= M; i++)printf("%d", basket[i]);printf("\n");}return;}for (i = 1; i <= n - (M-m); i++){basket[m] = i;if (i >= basket[m-1])   //当前篮子放的鸡蛋要不能比上个篮子的少PackEgg(n - i,m+1);}}int main(int argc, char* argv[]){scanf("%d %d", &N, &M);PackEgg(N, 1);return 0;}


                                             
0 0
原创粉丝点击