#include "stdafx.h"
#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=%d/n/n", 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);
return
博客展示了一段C语言代码,通过递归函数`Combine`实现邮票面值组合。定义了邮票面值数组,在`Combine`函数中尝试在剩余张数内组合出面值和,在`main`函数中循环调用`Combine`函数进行测试,体现了C语言在算法实现上的应用。
5万+





