解题思路:
主要是用循环的嵌套输出排列,每一位遍历所有可能但不能和前面的数重复。但是这个题目还有考虑输出顺序和例子一样,所以还要考虑每轮剔除的数
注意事项:
参考代码:
不考虑顺序:
#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 人评分