<span style="font-family:Arial, Helvetica, sans-serif;">由于题目只要求一组解,所以在使用DSF算法时,递归的时候要有返回值,这样可以马上退出,求的一组解。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">但如果是求出所有解,则无需返回值。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">
</span>
<span style="font-family:Arial, Helvetica, sans-serif;"></span><pre name="code" class="cpp">#include<stdio.h>
char a[5002];
char b[4]="NOP";
int Ok(int l)
{
int i,j;
for(i=0;i<(l+1)/2;i++)
{
for(j=0;j<=i;j++)
{
if(a[l-i+j]!=a[l-2*i+j-1])break;
}
if(j>i)return 0;
}
return 1;
}
int fun(int i)
{
if(i>=5000)
return 1;
for(int j=0;j<3;j++)
{
a[i]=b[j];
if(!Ok(i))
continue;
//fun(i+1);
if(fun(i+1))
return 1;
}
return 0;
}
int main()
{
int n;
fun(0);
while(scanf("%d",&n)!=EOF,n)
{
for(int i=0;i<n;i++)
printf("%c",a[i]);
printf("\n");
}
return 0;
}