首页 > 其他分享 >B. 全排列问题

B. 全排列问题

时间:2024-10-12 23:19:59浏览次数:10  
标签:输出 排列 数字 int 样例 dfs 问题 序列

时间限制:1 s 空间限制:256 MB

输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。(注意输出格式)

输入

n(1<=n<=9)

输出

由1~n组成的所有不重复的数字序列,每一行一个序列,每个数字前4个空格。

样例

样例输入1
3
样例输出1
    1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1

分析:

        这题眨眼一看,感觉很简单,可是,又让你无能为力,于是,爱骗分的你就会像我一样

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int sum=1,num=0;
	for(int i=1;i<=n;i++)
	{
		sum*=i;
		num+=i;
	}
	if(n==3)
	{
		cout<<"1 2 3"<<endl;
		cout<<"1 3 2"<<endl;
		cout<<"2 1 3"<<endl;
		cout<<"2 3 1"<<endl;
		cout<<"3 1 2"<<endl;
		cout<<"3 2 1"<<endl;
		return 0;
	}
	if(n==4)
	{
		cout<<"1 2 3 4"<<endl;
		cout<<"1 2 4 3"<<endl;
		cout<<"1 3 2 4"<<endl;
		cout<<"1 3 4 2"<<endl;
		cout<<"1 4 2 3"<<endl;
		cout<<"1 4 3 2"<<endl;		
		cout<<"2 1 3 4"<<endl;
		cout<<"2 1 4 3"<<endl;
		cout<<"2 3 1 4"<<endl;
		cout<<"2 3 4 1"<<endl;
		cout<<"2 4 1 3"<<endl;
		cout<<"2 4 3 1"<<endl;
		cout<<"3 1 2 4"<<endl;
		cout<<"3 1 4 2"<<endl;
		cout<<"3 2 1 4"<<endl;
		cout<<"3 2 4 1"<<endl;
		cout<<"3 4 1 2"<<endl;
		cout<<"3 4 2 1"<<endl;
		cout<<"4 1 2 3"<<endl;
		cout<<"4 1 3 2"<<endl;
		cout<<"4 2 1 3"<<endl;
		cout<<"4 2 3 1"<<endl;
		cout<<"4 3 1 2"<<endl;
		cout<<"4 3 2 1"<<endl;
		return 0;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			for(int k=1;k<=n;k++)
			{
				for(int m=1;m<=n;m++)
				{
					for(int o=1;o<=n;o++)
					{
						if(n==6)
						{
							for(int x=1;x<=n;x++)
							{
								if(i*j*k*m*o*x==sum&&i+j+k+m+o+x==num)
								{
									cout<<i<<" "<<j<<" "<<k<<" "<<m<<" "<<o<<" "<<x<<endl;
							    }
							}	
							continue;
						}
						if(n==7)
						{
							for(int x=1;x<=n;x++)
							{
								for(int y=1;y<=n;y++)
								{
									if(i*j*k*m*o*x*y==sum&&i+j+k+m+o+x+y==num)
									{
										cout<<i<<" "<<j<<" "<<k<<" "<<m<<" "<<o<<" "<<x<<" "<<y<<endl;
								    }	
								}
							}
							continue;		
						}
						if(i*j*k*m*o==sum&&i+j+k+m+o==num)
						{
							cout<<i<<" "<<j<<" "<<k<<" "<<m<<" "<<o<<endl;
						}
					}	
				}	
			}
		}
	}
}

你可以把n为1到9全部枚举出来,事实上,测试点最大的也无非是7

所以,大声喊出我们的口号:

                        暴力出奇迹,骗分过样例。

                        爆搜挂着机,打表出省一。

打表出省一,出省一!!!

咳咳,刚才你什么也没看到,没看到。。。

正解(上面非错解):

        dfs深搜(也是骗分常用技巧  可参见https://qoj.fzoi.top/post/1228):

void dfs(int k)
{
	if(k>n)
	{
		for(int i=1;i<=n;i++)
		{
			cout<<a[i]<<" ";
		}
		cout<<endl;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(f[i]==0)
		{
			a[k]=i;
			f[i]=1;
			dfs(k+1);
			f[i]=0;			
		}
	}
}

完整代码:

#include <bits/stdc++.h>
using namespace std;
int n,a[1010],f[1010],sum;
void dfs(int k)
{
	if(k>n)
	{
		for(int i=1;i<=n;i++)
		{
			cout<<a[i]<<" ";
		}
		cout<<endl;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(f[i]==0)
		{
			a[k]=i;
			f[i]=1;
			dfs(k+1);
			f[i]=0;			
		}
	}
}
int main()
{
	cin>>n;
	dfs(1);
}

标签:输出,排列,数字,int,样例,dfs,问题,序列
From: https://blog.csdn.net/wang121209/article/details/142890298

相关文章

  • 嵌入式Linux系统磁盘空间问题
    问题描述:我的系统板是stm32mp157,属于mpu,搭载了嵌入式Linux系统,我将系统通过STM32CubeProgrammer烧录在了一张32g的sd卡上,可是系统烧录完毕启动板子后,使用命令df-h查看发现磁盘空间只有1个多g,如下图上网查看,问题可能出在我的系统是由buildroot进行构建的,某些嵌入式系统的构......
  • 【倍增】RMQ问题与ST表
    问题叙述RMQ是RangeMaximum/MinimumQuery的缩写,表示区间最大/最小值。显而易见的,可以用线段树写。但是我这样的蒟蒻早就忘了线段树怎么写了,而且由于该问题不涉及修改操作,所以线段树十分没有性价比。这是就需要用到好理解又好写的ST表了。算法思路ST表是用于解决可重......
  • 第1关:求解一个整数数组划分为两个子数组问题
    [TOC]求解一个整数数组划分为两个子数组问题任务描述已知由n(n>=2)个整数正整数构成的集合A={ak}(0<=k<n),将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中的元素之和分别为S1和S2.设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大,算法返回|......
  • 第2关:寻找一个序列中的第K小的元素(即第k小元问题)
    [TOC]寻找一个序列中的第K小的元素(即第k小元问题)对于给定的含有n(n<=100)元素的无序序列,求这个序列中第k(1≤k≤n)小的元素。任务描述本关任务:编写一个能计算数组中的第k小的元素的小程序。相关知识假设无序序列存放在a[0…n-1]中,若将a递增排序,则第k小的元素为a[k-1]。......
  • 记一次docker overlay2目录空间占用过高问题
    背景最近需要频繁本地构建镜像以及调试POD,导致磁盘空间告警分析查看当前磁盘使用情况#df-h发现这个目录下占用了不少空间docker常见的造成磁盘告警的原因有,知道原因之后就可以开始清理工作了/var/lib/docker/containers#容器/var/lib/docker/volumes#数据卷......
  • 连通性问题大杂烩
    前言连通性问题确实时一大比较难啃得蛋糕,每次都要先学习一遍,还不如一次学到通无向图的连通性问题求割点连通图:连通图内的所有点都可以互相到达割点:将割点删掉后整张图不连通定理1:一个点s是割点,当且仅当s作为该连通图的根时,会把连通图分为不相连的几部分定理2:一个非根节点......
  • 【原创】修复freeepascal自带的tdbf组件使用中文字段时转换为utf8时可能出现文字错的
    修复freeepascal自带的tdbf组件字段名称使用中文时转换为utf8时可能出现文字错:修改方法:打开fpcsrc\packages\fcl-db\src\dbase\dbf_dbffile.pas修改第816/1236/1246/1842/2758行,将AnsiUpperCase改为UpperCase。重新编译fpcsrc源码或将dbase文件夹拷贝到project目录,重新编译proje......
  • proteus-7.8的安装教程+安装产生的问题+创建桌面快捷方式
    20241012,记录一下老师教的Proteus7.8的安装过程,以及自己在安装过程中产生的问题目录安装过程1-21出现Nolicencekeyisinstalled的问题解决方法,请看8proteus的破解方法,请看17-20寻找proteus,创建桌面快捷方式,请看211.新建一个文件夹,Proteus(建议放在D盘)2.解压Proteus-......
  • 5.5求非凸函数的线性规划问题
    importnumpyasnpfromscipy.optimizeimportminimizedefobjective(x):return2*x[0]+3*x[0]**2+3*x[1]+x[1]**2+x[2]defconstraint1(x):return10-(x[0]+2*x[0]**2+x[1]+2*x[1]**2+x[2])defconstraint2(x):......
  • 解决Gerrit+Nginx+Git LFS传大文件失败的问题
    首先有两个位置要放开限制:一是nginx这边上传文件大小要放开。编辑/etc/nginx/conf.d/gerrit.conf:client_max_body_size500m二是gerrit这边lfs的大小限制要放开。拉取All-Projects仓库,执行$gitfetchoriginrefs/meta/config$gitcheckoutFETCH_HEAD然后添加一个lfs.c......