解题思路:
主要是用循环的嵌套输出排列,每一位遍历所有可能但不能和前面的数重复。但是这个题目还有考虑输出顺序和例子一样,所以还要考虑每轮剔除的数
注意事项:
参考代码:
不考虑顺序:
#include<stdio.h>
#include<string.h>
//三个数的排列,嵌套三个循环,每个循环都把4个数依次全试一遍,但不能重复,遇到重复就continue
int main()
{
int in[4],i,j,k;
for(i=0;i<4;i++)
{
scanf("%d",&in[i]);
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(i==j)
continue;
for(k=0;k<4;k++)
{
if(k==j||k==i)
continue;
printf("%d %d %d\n",in[i],in[j],in[k]);
}
}
}
return 0;
}
考虑顺序:
#include<stdio.h>
//由于题目要求的顺序必须是它所给出实例的顺序,第一次剔除4,输出1,2,3的全排列;第二次剔除3,输出1,2,4的全排列;第三次剔除2,输出 1,3,4的全排列;第四次剔除1,输出2,3,4的全排列
//故为了满足这个顺序,必须再加一个循环,记录每次剔除的数
int main()
{
int in[4],i,j,k,t;
for(i=0;i<4;i++)
{
scanf("%d",&in[i]);
}
for(i=3;i>=0;i--)//用i来记录每次要剔除的数
{
for(j=0;j<4;j++)
{
if(j==i)
continue;
for(k=0;k<4;k++)
{
if(k==i||k==j)
continue;
for(t=0;t<4;t++)
{
if(t==i||t==j||t==k)
continue;
printf("%d %d %d\n",in[j],in[k],in[t]);
}
}
}
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复