【C/C++】之组合不重复的3位数

个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主

💬 刷题网站:在线刷题 (educoder.net)

 特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路!

目录

组合不重复的3位数

编程要求

测试输入

测试输出

C语言

题解

易错点

C++

全排列函数 next_permutation

代码

执行结果


组合不重复的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

C语言

题解

#include <stdio.h>
void composeNumber(int a, int b, int c, int d);

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, num[4];
	num[0] = a;
	num[1] = b;
	num[2] = c;
	num[3] = d;

	for (int i = 0; i < 4; i++) {
		s = 0;

		for (int j = 0; j < 4; j++) {
			s = num[i] * 100;

			if (num[j] != num[i]) {
				s += num[j] * 10;
			} else
				continue;

			for (int k = 0; k < 4; k++) {
				if (num[k] != num[j] && num[k] != num[i]) {
					s += num[k];
					printf("%d\n", s);
					s -= num[k];
				} else
					continue;
			}
		}

	}

	/********* End *********/
}

易错点

在每个循环刚开始的时候都要重置一下s,不然在算新的循环时会用上次循环结束的值,就比如上面如果不加重置的话会出现除1,2,3,4的其他数,第一次循环的重置为0,第二次循环的重置为            s = num[i] * 100;也就是每次循环到这里只有百位是确定好的,其他位置还没有确定,第三次重置因为下面没有循环了,所以要把重置内容放在循环的末尾,如果加了个位,就在输出完删去,这样保证下次再加个位还是个位为0,如果没有加个位也就不用重置。

执行结果

C++

全排列函数 next_permutation

它会把数组中元素的排列顺序都排列一遍后返回一个false,在此之前都返回的是true

代码

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int a[4];

	for (int i = 0; i < 4; i++) {
		scanf("%d", &a[i]);
	}

	do {
		for (int i = 0; i < 3; i++) {
			printf("%d", a[i]);
		}

		printf("\n");
	} while (next_permutation(a, a + 4));

	return 0;
}

执行结果

 

各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!

👍+✏️+⭐️是对博主最大的鼓励与支持!!!

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天寒雨落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值