//(20分)共有N种面值的邮票,存在整数R,使得用不超过M枚的上述面值的邮票
//可以贴出从1开始一直到R的有面值,但不能R+1。例如:面值(1,4,7,8的邮票
//不超过3张可以贴出1~24间的所有邮资,但贴不出25。)请从键盘输入M和N,
//寻找一种确定每种邮票面值的方案,使得该方案在M和N的限制下对应的R值最大。
#define M 3 //邮票个数
#define N 4 //面值个数
#define MAX_N 20 //邮票面值个数上限
#define MAX_VALUE 100 //最大组合数
#define MAX_STAMP 20 //假定最大面值不超过20分
int maxR = 0; //最大的R值
//邮票面值从小到大排列,0下标不使用,1号表示存的是1分(1分必不可少)
int stamp[MAX_N] = {0, 1};
int SortArray[MAX_VALUE]; //用以检查连续性的数组
int final[MAX_N]; //最终输出结果
#include <stdio.h>
void calc(int sum, int i, int depth)
{
int val, j;
if(depth <= M){
val = sum + stamp[i];
//存到检查连续性的数组中
SortArray[val] = val;
j = (depth == 0? i + 1 : i);
for(; j <= N; j++)
calc(val, j, depth + 1);
}
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载