刻度的设置pascal

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:56:22
〖训练C-11〗刻度的设置

描述 Description
一根长n厘米长的尺子,只允许在上面刻5个刻度,要能用它量出1~n厘米的各种长度。试问这根尺的刻度应该怎样选择。

输入格式 Input Format
一个整数n(10<=n<=19).

输出格式 Output Format
所有可选择的方案。
一行一个方案,由小到大排列的用空格隔开的七个整数。
前面刻度较小的方案先输出。
如果无解,则输出“no answer”.

输入 Sample Input
17

样例输出 Sample Output
1 2 3 8 13
1 2 6 10 14
1 2 8 12 14
1 2 8 12 15
1 4 10 12 15
1 8 11 13 15
2 4 6 9 16
2 5 7 13 16
2 5 9 15 16
3 5 9 15 16
3 7 11 15 16
4 9 14 15 16

#include<iostream>
using namespace std;
int n;
int p[10];
bool flag[50];
void try_(int dep,int min)
{
if (dep==5)
{
for (int i=1;i<n;i++)
{
flag[i]=true;
}
for (int i=0;i<5;i++)
{
flag[p[i]]=false;
flag[n-p[i]]=false;
for (int j=0;j<5;j++)
{
flag[abs(p[i]-p[j])]=false;
}
}
for (int i=1;i<n;i++)
{
if (flag[i])return;
}
for (int i=0;i<5;i++)
{
printf("%d ",p[i]);
}
printf("\n");
return ;
}

for (int i=min;i<n;i++)
{
p[dep]=i;
try_