给四位数字,组成不重复的3位数的组合

编程要求

给出四个不同的数字,能够组成多少个不重复的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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值