当前位置: 首页 > article >正文

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的情况下,应该是多少个数呢?


http://www.kler.cn/news/359695.html

相关文章:

  • 碰到这个问题请更新或重新安装fastapi版本
  • 数据分析-31-时间序列分析的卡尔曼滤波器平滑方法
  • 代理模式演示(C++)三分钟读懂
  • 东芝TLP176AM光耦合器:提升设计性能的关键元件
  • 顺序表逆置相关的算法题|整体逆置|两个顺序表互换位置|轮转数组(C)
  • 使用网络爬虫爬取豆瓣电影网站的数据
  • Kimi AI助手重大更新:语音通话功能闪亮登场!
  • AI大模型是否有助于攻克重大疾病?
  • 数据仓库宽表概述
  • 作用域的类型与注意事项
  • SVM算法
  • VSCode编译器改为中文
  • html全局属性、框架标签
  • npm 加速,命令行修改国内镜像源【附带国内最新几个镜像】超简约版~
  • 最佳副屏串流解决方案:如何低成本打造电脑拓展副屏?
  • HTml + CSS 核心笔记 (八)
  • 【C++刷题】力扣-#119-杨辉三角II
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • React中的Hooks钩子
  • Node + HTML搭建自己的ChatGPT [基础版]