数字排列问题

本文探讨了一种特殊的数字排列问题,其中包含7对数字1到7,要求每对数字之间间隔相应的数字数量。已知一个以17126425374635开始的正确排列,任务是找到另一个以74开头的符合条件的14位数字排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。

要求:两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。

如下就是一个符合要求的排列: 17126425374635        

当然,如果把它倒过来,也是符合要求的。

请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。         注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。 74****4*7******* 

#include<stdio.h>
#define n 14
int a[n]={0};

//判断m之前是否存在m,如果存在,返回false;否则,返回true
bool ok(int m)
{
	for(int i=0; i<m; i++)
	{
		if(a[i]==a[m])
			return false;
	}
	return true;
}

void traceback(int t)
{
	//当程序走到最后一层时,直接输出
	if(t==n)
	{	
		for(int i=0; i<n; i++)
		{
			printf("%d",a[i]);
		}
		printf("\n");
		return;
	}

	//判断第t个数是否存在,如果不存在,给a[t]赋值1~7,而且a[t+i+1]的值和a[t]相等。然后判断a[t+1]
	if(a[t]==0)
	{
		for(int i=1; i<=n/2; i++)
		{
			a[t]=i;
			if(a[t+i+1]==0 && ok(t))
			{
				a[t+i+1]=i;
				traceback(t+1);
				a[t+i+1]=0;
			}
			a[t]=0;
		}
	}//如果存在,则直接判断a[t+1]
	else
		traceback(t+1);
}

int main()
{
	a[0]=7,a[1]=4,a[6]=4,a[8]=7;
	traceback(2);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值