8.C++经典实例-计算给定几个数字组成的所有不重复的数

例如,我们要计算1,2,3,4,5这五个数,组成不重复的五位数,那么能产生多少个呢?使用最慢的方式,是一个一个计算出来并统计出出现了多少个,如下面的程序:

#include <iostream>
#include <vector>

int main() {
	std::vector<int> digits = {1, 2, 3, 4, 5};
	int count = 0;

	// 使用四重循环生成所有可能的四位数
	for (int i = 0; i < 5; ++i) {
		for (int j = 0; j < 5; ++j) {
			for (int k = 0; k < 5; ++k) {
				for (int l = 0; l < 5; ++l) {
					for (int m = 0; m < 5; ++m) {
						// 确保每个数字只出现一次
						if (i != j && i != k && i != l && i != m && 
						j != k && j != l && j != m  
						&& k != l && k != m 
						&& l != m) {
							std::cout << digits[i] << digits[j] << digits[k] << digits[l] << digits[m] << std::endl;
							count++;
						}
					}

				}
			}
		}
	}

	std::cout << "总共有 " << count << " 个互不相同且无重复数字的四位数。" << std::endl;
	return 0;
}

我们运行:

 可以看到出现了120个不重复的数字,那么数越多,计算越慢,总不能无限近几年去计算吧,这个时候其实我们就可以用到阶乘的方式了,比如5个不重复的数字,可以出现多少个,那么不可以计算5!=5*4*3*2*1那么这个时候是不是就少了很多,一下子就算出来了,阶乘怎么写程序,咱们前面已经讲过,大家也可以考虑一下,如果里面包含一个0的情况下,应该是多少个数呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值