解题思路:
这个题目,其实告诉你,四个不同的数的全排列的得到方式:看样例选取的四个数分别为1 2 3 4,细心你会发现,题目的输出就是告诉你,四个数的全排列输出时所有数的下标情况,那么,我们只需要,几次赋值操作,就可以得到4 个数的全排列了;
看图中,把数分成了四组,我们只要得到每组开头的三个数(假设把它们存在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 人评分
#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"); } } } } }
多输入输出练习1 (C语言代码)浏览:1178 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:742 |
printf基础练习2 (C语言代码)浏览:305 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:373 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:850 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:1415 |
愚蠢的摄影师 (C++代码)浏览:934 |
链表数据求和操作 (C语言代码)浏览:941 |
1231题解(注意理解“输入多个测试实例”)浏览:785 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:455 |
秋 2024-03-10 20:49:12 |
答案没有错呀为什么显示答案错误,一共24组哪个大佬给我解解惑