C语言考试练习题_排列
题目描述
有4个互不相同的数字,输出由其中三个不重复数字组成的排列。
输入
4个整数。
输出
所有排列。
样例输入
1 2 3 4
样例输出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 1 2 4 1 4 2 2 1 4 2 4 1 4 1 2 4 2 1 1 3 4 1 4 3 3 1 4 3 4 1 4 1 3 4 3 1 2 3 4 2 4 3 3 2 4 3 4 2 4 2 3 4 3 2
本来是不打算贴上来的,感觉自己做的太水了,但是觉得这个题还是很好的,虽然打的是全排列,但是输出的格式不是正常的格式,这样需要在深搜之前先处理一下,比如改变里面的值,反正,我现在还没想到不多次使用 dfs 怎么处理这个问题.......
#include<stdio.h>
#include<string.h>
int vis[5],x[10],y[10],s[10];
void dfs(int v)
{
if(v==3) //控制个数
{
int i;
for(i=0;i<2;++i) //输出控制
{
printf("%d ",x[i]);
}
printf("%d\n",x[i]); //注意格式
return;
}
for(int i=0;i<3;++i) //循环保存数组里的数据.
{
if(!vis[i])
{
vis[i]=1;
x[v]=s[i];
dfs(v+1);
vis[i]=0;
}
}
}
int main()
{
int i,j,k;
while(~scanf("%d",&y[0]))
{
for(i=1;i<4;++i)
{
scanf("%d",&y[i]);
}
k=4;
while(k--)
{
for(i=0,j=0;j<3;++i) //改变需要处理的数组内部的值
{
if(i!=k)
{
s[j++]=y[i];
}
}
dfs(0); //打印全排列
}
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1005
User: 311409010319
Language: C++
Result: 正确
Time:0 ms
Memory:816 kb
****************************************************************/