今天在优快云上逛,看有一人提如下……
只有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;
}
6364

被折叠的 条评论
为什么被折叠?



