Manchester


私信TA

用户名:wenyajie

访问量:331909

签 名:

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

等  级
排  名 1
经  验 65524
参赛次数 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分

83 人评分

  评论区

这B是怎么顶着C的名号打C++代码还拿优质题解的???
2021-10-30 22:51:51
666
2021-07-12 21:09:58
暴力出奇迹
2021-05-13 18:46:17
这波啊,我大意了没有闪
2020-11-26 16:34:51
666
2020-09-30 09:48:03
666666太强了
2020-09-19 15:23:58
为啥不直接输出样本数据哈哈哈开个玩笑
2020-04-14 19:27:15
666
2020-03-18 17:42:04