C语言题目:数字不重复排列

题目描述

有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

代码分析

  1. #include <stdio.h>:包含标准输入输出库,用于进行输入输出操作。

  2. int main(void):定义主函数,void表示不需要任何参数。

  3. int arr[4];:声明一个整型数组arr,大小为4,用于存储用户输入的整数。

  4. for (int i = 0; i < 4; i++):外层循环,用于读取用户输入。

  5. scanf("%d", &arr[i]);:通过scanf函数从标准输入读取一个整数,并将其存储在数组arr的第i个位置。

  6. int m = 3;:声明一个整型变量m并初始化为3,这个变量用于在循环中指定要跳过的元素的索引。

  7. while (m >= 0):定义一个while循环,条件是m大于等于0,循环会执行4次,因为m将从3递减到0。

  8. for (int i = 0; i < 4; i++):第一个嵌套循环,用于遍历数组arr中的元素。

  9. if (i == m) continue;:如果当前索引i等于要跳过的索引m,则跳过当前循环的剩余部分。

  10. for (int j = 0; j < 4; j++):第二个嵌套循环,用于与外层循环中的元素进行配对。

  11. if (j == m) continue;:同上,跳过索引为m的元素。

  12. for (int k = 0; k < 4; k++):第三个嵌套循环,用于与前两个循环中的元素进行配对。

  13. if (k == m) continue;:同上,跳过索引为m的元素。

  14. if (i != j && i != k && j != k):一个条件判断,确保ijk三个索引互不相同,即生成的三元组中没有重复的元素。

  15. printf("%d %d %d \n", arr[i], arr[j], arr[k]);:如果条件满足,则打印三元组arr[i]arr[j]arr[k]

  16. m--;:在while循环的每次迭代结束时,将m减1,这样在下一次迭代中,会跳过数组中的下一个元素。

  17. return 0;:主函数返回0,表示程序正常结束。

整体流程分析

  • 程序首先读取用户输入的4个整数到数组arr中。
  • while循环控制了4次迭代,每次迭代中m的值递减,分别对应数组中索引为3、2、1、0的元素。
  • 在每次while循环中,有三个嵌套的for循环,它们分别遍历数组arr中的元素,但会根据变量m的值跳过一个特定的元素。
  • 通过三层循环的嵌套,程序生成所有可能的三元组(三个不同的元素的组合),并检查这些组合中的元素是否互不相同。
  • 如果三元组中的元素互不相同,则通过printf函数打印出来。

源代码

复制代码
#include <stdio.h>
int main(void)
{
	int arr[4];
	for (int i = 0; i < 4; i++)
	{
		scanf("%d", &arr[i]);
	}
	int m = 3;
	while (m >= 0)
	{
		for (int i = 0; i < 4; i++)
		{
			if (i == m)
				continue;
			for (int j = 0; j < 4; j++)
			{
				if (j == m)
					continue;
				for (int k = 0; k < 4; k++)
				{
					if (k == m)
						continue;
					if (i != j && i != k && j != k)
					{
						printf("%d %d %d \n", arr[i], arr[j], arr[k]);
					}
				}
			}
		}
		m--;
	}
	return 0;
}
相关推荐
CoovallyAIHub2 小时前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub3 小时前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub3 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub4 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub4 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞4 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕6 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub6 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub7 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone77397 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试