题目描述
将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。
注意,需要提交的是一个整数,不要填写任何多余的内容。
先写一个检查的程序
while(i<=9)//检查程序//
{
if(a[f]-a[i]==1||a[i]-a[f]==1)
{
r=0;
}
i++;
f++;
}
if(r==1){
sum++;
}
对排序
int a[10]={1,2,3,4,5,6,7,8,9,10};
int yi=1;
int er=1;
int san=1;
int si=1;
int wu=1;
int lu=1;
int qi=1;
int ba=1;
int ju=1;
int shi=1;
int i=1;
int f=0;
int r=1;
int sum=0;
int z=0;
for(yi=1;yi<11;yi++)
{
a[1]=yi;
for(er=1;er<11;er++)
{
if(yi==er)
{continue;
}
a[2]=er;
for(san=1;san<11;san++)
{
if(yi==san||er==san)
{continue;
}
a[3]=san;
for(si=1;si<11;si++)
{
if(yi==si||er==si||san==si)
{continue;
}
a[4]=si;
for(wu=1;wu<11;wu++){
if(yi==wu||er==wu||san==wu||si==wu)
{continue;
}
for(lu=1;lu<11;lu++){
if(yi==lu||er==lu||san==lu||si==lu||wu==lu)
{continue;
}
for(qi=1;qi<11;qi++){
if(yi==qi||er==qi||san==qi||si==qi||wu==qi||lu==qi)
{continue;
}
for(ba=1;ba<11;ba++){
if(yi==ba||er==ba||san==ba||si==ba||wu==ba||lu==ba||qi==ba)
{continue;
}
for(ju=1;ju<11;ju++){
if(yi==ju||er==ju||san==ju||si==ju||wu==ju||lu==ju||qi==ju||ba==ju)
{continue;
}
for(shi=1;shi<11;shi++){
if(yi==shi||er==shi||san==shi||si==shi||wu==shi||lu==shi||qi==shi||ba==shi||ju==shi)
{continue;
}
a[10]=shi;
z++;
}
a[9]=ju;
shi=1;}
a[8]=ba;
ju=1;
shi=1;}
a[7]=qi;
ba=1;
ju=1;
shi=1;}
a[6]=lu;
qi=1;
ba=1;
ju=1;
shi=1;}
a[5]=wu;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;}
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1; }
si=1;
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;
}
san=1;
si=1;
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;
}
er=1;
san=1;
si=1;
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;
}
合起来
#include<stdio.h>
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
int yi=1;
int er=1;
int san=1;
int si=1;
int wu=1;
int lu=1;
int qi=1;
int ba=1;
int ju=1;
int shi=1;
int i=1;
int f=0;
int r=1;
int sum=0;
int z=0;
for(yi=1;yi<11;yi++)
{
a[1]=yi;
for(er=1;er<11;er++)
{
if(yi==er)
{continue;
}
a[2]=er;
for(san=1;san<11;san++)
{
if(yi==san||er==san)
{continue;
}
a[3]=san;
for(si=1;si<11;si++)
{
if(yi==si||er==si||san==si)
{continue;
}
a[4]=si;
for(wu=1;wu<11;wu++){
if(yi==wu||er==wu||san==wu||si==wu)
{continue;
}
for(lu=1;lu<11;lu++){
if(yi==lu||er==lu||san==lu||si==lu||wu==lu)
{continue;
}
for(qi=1;qi<11;qi++){
if(yi==qi||er==qi||san==qi||si==qi||wu==qi||lu==qi)
{continue;
}
for(ba=1;ba<11;ba++){
if(yi==ba||er==ba||san==ba||si==ba||wu==ba||lu==ba||qi==ba)
{continue;
}
for(ju=1;ju<11;ju++){
if(yi==ju||er==ju||san==ju||si==ju||wu==ju||lu==ju||qi==ju||ba==ju)
{continue;
}
for(shi=1;shi<11;shi++){
if(yi==shi||er==shi||san==shi||si==shi||wu==shi||lu==shi||qi==shi||ba==shi||ju==shi)
{continue;
}
a[10]=shi;
z++;
r=1;
i=1;
f=0;
while(i<=9)//检查程序//
{
if(a[f]-a[i]==1||a[i]-a[f]==1)
{
r=0;
}
i++;
f++;
}
if(r==1){
sum++;
}
}
a[9]=ju;
shi=1;}
a[8]=ba;
ju=1;
shi=1;}
a[7]=qi;
ba=1;
ju=1;
shi=1;}
a[6]=lu;
qi=1;
ba=1;
ju=1;
shi=1;}
a[5]=wu;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;}
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1; }
si=1;
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;
}
san=1;
si=1;
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;
}
er=1;
san=1;
si=1;
wu=1;
lu=1;
qi=1;
ba=1;
ju=1;
shi=1;
}
printf("%d\n",z);
printf("%d",sum);
}
共3628800种排列
其中722997种符合条件