#include <stdio.h>
main()
{
int i,j,k,m,n,p,q,counter=0;
int num[5]={0};
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
for(k=1;k<=5;k++)
for(m=1;m<=5;m++)
for(n=1;n<=5;n++)
{
num[0]=i;
if(j!=i)
{
num[1]=j;
if(k!=i&&k!=j)
{
num[2]=k;
if(m!=i&&m!=j&&m!=k)
{
num[3]=m;
if(n!=i&&n!=j&&n!=k&&n!=m) /*输出所有全排列的数 */
{
num[4]=n;
if(num[0]==3&&num[1]!=4) /*筛选1 */
{
for(q=0;q<5;q++)
printf("%d",num[q]);
printf("\n");
counter++;
}
for(p=1;p<4;p++)
{
if(num[p]==3&&num[p+1]!=4&&num[p-1]!=4)/*筛选2*/
{
for(q=0;q<5;q++)
printf("%d",num[q]);
printf("\n");
counter++;
}
}
if(num[4]==3&&num[3]!=4)/*筛选3*/
{
for(q=0;q<5;q++)
printf("%d",num[q]);
printf("\n");
counter++;
}
}
}
}
}
}
printf("There are %d numbers!\n",counter);
}
从理论上算,共有 5!-2!*4!=72 个数满足题意,与程序输出结果相一致.