/************************************************************************/
/*FileName:跳棋问题
/*Author:PenglueR
/*Date:2009/07/15
/*Comment:
/************************************************************************/
#include <iostream>
using namespace std;
int step(int n,int s,int i);
int main()
{
int n;//存放有多少个位置
int Smin=0;//存放最小步数
cout<<"请输入有多少个位置(>2):";
cin>>n;
int a[20];
for (int i=0;i<20;i++)
a[i]=0;
int k=0;//记录临时移动的步数
for (int i=1,j=0;i<=(n/2)+1;i++,j++)
{
a[j] = step(n,Smin,i)+k;
k++;
}
Smin = a[0];
for(int i=1;a[i]!=0;i++)
{
if (Smin>=a[i])
{
Smin=a[i];
}
else
{
Smin=Smin;
}
}
cout<<"最小步数是:"<<Smin<<endl;
return 0;
}
int step(int n,int s,int i)
{
int sp=0;//返回步数
int j=0,tmp;
int b[20];
for (int p=0;p<20;p++)
b[p]=0;
b[0]=1;
b[i]=1;
while (1)
{
if (i==n-1&&j==n-2)
break;
if ((i+(i-j))<n&&b[i+(i-j)]==0)
{
b[j]=0;
b[i+(i-j)]=1;
tmp=j;
j=i;
i=i+(i-tmp);
sp++;
}
else
{
b[j] = 0;
b[j+1] = 1;
j++;
sp++;
}
}
return sp;
}
//