Manchester


私信TA

用户名:wenyajie

访问量:312970

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62767
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
这个题目,其实告诉你,四个不同的数的全排列的得到方式:看样例选取的四个数分别为1 2 3 4,细心你会发现,题目的输出就是告诉你,四个数的全排列输出时所有数的下标情况,那么,我们只需要,几次赋值操作,就可以得到4 个数的全排列了;

2017-12-03 23-28-39屏幕截图.png


看图中,把数分成了四组,我们只要得到每组开头的三个数(假设把它们存在A[3]里),就可以输出全排列;

因为,每一组,都是把A[3]中的元素,以下标(1,2,3)(1,3,2)(2,1,3)(2,3,1)(3,1,2)(3,2,1)分别输出;

但是注意数组下标从0开始,每个都要减去1;


代码1:  (观察其中赋值操作有重复的,化简后得到:代码2)最后6个赋值等式;还有更快的,把上面图片给的输出结果当做下标输出即可;(代码三)


#include<iostream>
using namespace std;
void output();
int A[3];
int B[4];

int main()
{
for(int i=0;i<4;i++)
cin>>B[i];

/*------------------------------*/
A[0]=B[0];
A[1]=B[1];
A[2]=B[2];
output();
/*------------------------------*/
A[0]=B[0];  
A[1]=B[1];
A[2]=B[3];
output();
/*------------------------------*/
A[0]=B[0];
A[1]=B[2];
A[2]=B[3];
output();
/*------------------------------*/
A[0]=B[1];
A[1]=B[2];
A[2]=B[3];
output();
/*------------------------------*/
return 0;
}

void output()
{
cout<<A[0]<<" "<<A[1]<<" "<<A[2]<<endl;
cout<<A[0]<<" "<<A[2]<<" "<<A[1]<<endl;
cout<<A[1]<<" "<<A[0]<<" "<<A[2]<<endl;
cout<<A[1]<<" "<<A[2]<<" "<<A[0]<<endl;
cout<<A[2]<<" "<<A[0]<<" "<<A[1]<<endl;
cout<<A[2]<<" "<<A[1]<<" "<<A[0]<<endl;
}


代码2:

#include<iostream>
using namespace std;
void output();
int A[3];
int B[4];

int main()
{
for(int i=0;i<4;i++)
cin>>B[i];

/*------------------------------*/
A[0]=B[0];
A[1]=B[1];
A[2]=B[2];
output();
/*------------------------------*/


A[2]=B[3];
output();
/*------------------------------*/

A[1]=B[2];

output();
/*------------------------------*/
A[0]=B[1];


output();
/*------------------------------*/
return 0;
}

void output()
{
cout<<A[0]<<" "<<A[1]<<" "<<A[2]<<endl;
cout<<A[0]<<" "<<A[2]<<" "<<A[1]<<endl;
cout<<A[1]<<" "<<A[0]<<" "<<A[2]<<endl;
cout<<A[1]<<" "<<A[2]<<" "<<A[0]<<endl;
cout<<A[2]<<" "<<A[0]<<" "<<A[1]<<endl;
cout<<A[2]<<" "<<A[1]<<" "<<A[0]<<endl;
}

代码三:

#include<iostream>
using namespace std;
int A[5];

int main()
{
for(int i=1;i<=4;i++)
cin>>A[i];

cout<<A[1]<<" "<<A[2]<<" "<<A[3]<<endl;
cout<<A[1]<<" "<<A[3]<<" "<<A[2]<<endl;
cout<<A[2]<<" "<<A[1]<<" "<<A[3]<<endl;
cout<<A[2]<<" "<<A[3]<<" "<<A[1]<<endl;
cout<<A[3]<<" "<<A[1]<<" "<<A[2]<<endl;
cout<<A[3]<<" "<<A[2]<<" "<<A[1]<<endl;

cout<<A[1]<<" "<<A[2]<<" "<<A[4]<<endl;
cout<<A[1]<<" "<<A[4]<<" "<<A[2]<<endl;
cout<<A[2]<<" "<<A[1]<<" "<<A[4]<<endl;
cout<<A[2]<<" "<<A[4]<<" "<<A[1]<<endl;
cout<<A[4]<<" "<<A[1]<<" "<<A[2]<<endl;
cout<<A[4]<<" "<<A[2]<<" "<<A[1]<<endl;

cout<<A[1]<<" "<<A[3]<<" "<<A[4]<<endl;
cout<<A[1]<<" "<<A[4]<<" "<<A[3]<<endl;
cout<<A[3]<<" "<<A[1]<<" "<<A[4]<<endl;
cout<<A[3]<<" "<<A[4]<<" "<<A[1]<<endl;
cout<<A[4]<<" "<<A[1]<<" "<<A[3]<<endl;
cout<<A[4]<<" "<<A[3]<<" "<<A[1]<<endl;

cout<<A[2]<<" "<<A[3]<<" "<<A[4]<<endl;
cout<<A[2]<<" "<<A[4]<<" "<<A[3]<<endl;
cout<<A[3]<<" "<<A[2]<<" "<<A[4]<<endl;
cout<<A[3]<<" "<<A[4]<<" "<<A[2]<<endl;
cout<<A[4]<<" "<<A[2]<<" "<<A[3]<<endl;
cout<<A[4]<<" "<<A[3]<<" "<<A[2]<<endl;

}


 

0.0分

82 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#include<stdio.h>
int main()
{
	int arr[4];
	int i, j,z;
	for (i = 0; i < 4; i++)
	{
		scanf_s("%d", &arr[i]);

	}
	
	for (i = 0; i < 4; i++)
	{
		for (j = 3; j > i; j--)
		{
			for (z = 0; z < 4; z++)
			{
				if (arr[z] != arr[i] && arr[z] != arr[j])
				{
					printf("%d %d %d", arr[i], arr[j], arr[z]);
					printf("\n");
				}
             
			}
			
		}
	}
	for (i = 3; i>=0; i--)
	{
		for (j = 0; j < i; j++)
		{
			for (z = 0; z < 4; z++)
			{
				if (arr[z] != arr[i] && arr[z] != arr[j])
				{
					printf("%d %d %d", arr[i], arr[j], arr[z]);
					printf("\n");
				}

			}

		}
	}
}
2024-03-10 20:47:10
狗屎
2024-03-04 17:18:26
看到有人骂你我就放心了
2022-11-01 20:50:40
大力出奇迹
2022-06-09 19:05:43
666这不是暴力穷举吗
2022-01-18 07:55:22
直接复制正确答案不行吗?还要这么费劲
2021-11-10 02:32:00
笑死,打表还能拿优质
2021-11-05 14:27:14
这B是怎么顶着C的名号打C++代码还拿优质题解的???
2021-10-30 22:51:51