今天在CSDN上逛,看有一人提如下……
只有1克,2克,5克,7克,13克五个砝码,给定任意一个质量的物体,求解能否被称量(而且数字只能用一次,只能用加法)
问题:
只有1克,2克,5克,7克,13克五个砝码,给定任意一个质量的物体,求解能否被称量(而且数字只能用一次,只能用加法)
解决:
用递归可以解决!
#include "stdafx.h" #include <stdio.h> int poise[] = {1, 2, 5, 7, 13}; int flag[] = {0, 0, 0, 0, 0}; int AddPoise(int count, int current, int total) { for(int i = 0; i < 5; ++i) { if (flag[i]) continue; flag[i] = 1; --count; if (current + poise[i] == total) return total; else if (count) { if ( AddPoise(count, current + poise[i], total) == total) return total; } flag[i] = 0; ++count; } return current; } int main() { int weight; printf("Please input the weight(1-28):"); scanf("%d", &weight); printf("/n"); int w = AddPoise(5, 0, weight); if ( w == weight) { printf("The answer:"); for(int i = 0; i < 5; ++i) if (flag[i]) printf("%d,", poise[i]); printf("/n"); } else { printf("NO ANSWER!/n"); } printf("/n/nPress a key to exit..."); char ch; scanf("%d", &ch); return 0; }