编程要求
给出四个不同的数字,能够组成多少个不重复的3位数,按照从小到大的顺序输出,每行一个。
测试用例
测试输入
1 2 3 4
测试输出
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
解题思路:
四个数字组成一个三位数的组合,三位数的每一位都有四种可能,也就是三个循环,每个循环遍历四次
参考代码:
#include<stdio.h>
int main()
{
// 输入的4个不同数字
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
composeNumber(a, b, c, d);
}
// 完成这个函数
void composeNumber(int a, int b, int c, int d) {
/********* Begin *********/
int s[4]={a,b,c,d};
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
for(int l=0;l<4;l++)
{
if(s[j]!=s[k]&&s[j]!=s[l]&&s[l]!=s[k])//三个数要求互不相同
{
printf("%d%d%d\n",s[j],s[k],s[l]);
}
}
}
}
/********* End *********/
}
还有一道也是这种类型的,但是有点不同
题目描述
有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
不同之处应该看出来了吧,他这里要求是从4个数里每次取三个数排完各种可能性
解题思路:
还是用数组存储,有四个数嘛,也就是1 2 3 4 在数组中对应的序号也就是 0 1 2 3,
那我们可以这样想嘛,从4个数取三个数总共有四种可能,从序号来看就是以下四种:
0 1 2 和为3
0 1 3 和为4
0 2 3 和为5
1 2 3 和为6
他这个排序顺序就是序列和的递增嘛
#include<stdio.h>
int main()
{
int a[4];
int n1=0,n2=3;//n1是当前序列和,n2是排序要求的序列和
for(int i=0;i<4;i++)
{
scanf("%d",&a[i]);
}
for(n2=3;n2<7;n2++)//序列和增加
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
n1=i+j+k;
if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k]&&n1==n2)//序列和符合要求才输出
{
printf("%d %d %d\n",a[i],a[j],a[k]);
}
}
}
}
}
return 0;
}