【思特奇杯·云上蓝桥-算法集训营】第1周(第三题:图书排列)

题目描述

将编号为1~1010本书排放在书架上,要求编号相邻的书不能放在相邻的位置。

请计算一共有多少种不同的排列方案。

注意,需要提交的是一个整数,不要填写任何多余的内容。

 先写一个检查的程序

                                                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种符合条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值