#include <iostream> using namespace std; #define N 6 int w[N]; int number_used[N]; //bool is_used[N]; void init() { w[0] = 1; w[1] = 2; w[2] = 5; w[3] = 10; w[4] = 20; w[5] = 50; for (int i = 0; i < N; i++) { number_used[i] = 0; } } int test(int start_index, int left_weight) { int ret = 1; if (left_weight == 0) { for (int i = 0; i < N; i++) { if (number_used[i] > 0) cout << w[i] << "元: "<< number_used[i] <<"张 "; } cout << endl; return 1; } for (int i = start_index; i < N; i++) { if (left_weight >= w[i]) { number_used[i]++; ret += test(i, left_weight - w[i]); number_used[i]--; } } return ret; } int main() { init(); cout << test(0, 100) <<endl; system("pause"); return 0; } java 代码: public class STest { static int[] values={1,2,5,10,20,50}; public static void main(String[] args) { split(100,0,""); } public static void split(int n,int base,String result){ if(n<0) return; if(n==0){ System.out.println(result); return; } for(int i=base;i<values.length;i++){ split(n-values[i],i,result+values[i]+"|"); } } }