据说是华为2003年校园招聘笔试题

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 230 收藏 0 点赞 0 评论 0

有4种面值的邮票很多枚,这4种邮票面值分别1, 4, 12, 21,现从多张中最多任取5张进行组合,求取出这些邮票的最大连续组合值。(据说是华为2003年校园招聘笔试题)

#define N 5

#define M 5

int k, Found, Flag[N];

int Stamp[M] = {0, 1, 4, 12, 21};

 

// 在剩余张数n中组合出面值和Value

int Combine(int n, int Value) {

     if(n >= 0 && Value == 0) {

         Found = 1;

         int Sum = 0;

         for(int i=0; i<N && Flag[i] != 0; i++) {

              Sum += Stamp[Flag[i]];

              printf(“%d “, Stamp[Flag[i]]);

         }

         printf(“tSum=%dnn”, Sum);

     }else for(int i=1; i<M && !Found && n>0; i++)

         if(Value-Stamp[i] >= 0) {

              Flag[k++] = i;

              Combine(n-1, Value-Stamp[i]);

              Flag[–k] = 0;

         }

     return Found;

}

 

int main(int argc, char* argv[]) {

     for(int i=1; Combine(N, i); i++, Found=0);

}

评论列表
文章目录