Easy Problem 1 表格问题

本文解析了一道2019年针对Python工程师的招聘挑战题目,涉及排列组合算法实现,通过具体代码示例展示了如何生成特定条件下的数字排列,并对输入整数返回相应的排列组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:https://my.oschina.net/meiguizhinian/blog/edit/873697

Description

在一个2行3列的表格中,不重复地填入数字1、2、3、4、5和6。要求左右相邻的数字右边的数字比左边的数字大,上下相邻的数字下边的数字比上边的数字大。这样的表格一共有5种,可以把这5种表格按照字典序排序(排序时可以把表格的第2行移动到第1行的右边连成一个字符串,以字符串排序)。

The Input

你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,其中只包含一个整数i(1≤i≤5)。在行首和行尾没有多余的空格。

The Output

对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。每组答案占两行,即问题描述中按照字典序排在第i位的表格。该表格的每行包含三个整数,相邻的两个整数之间以一个空格隔开。在每行的第一个数之前和最后一个数之后不要输出多余的空格。在所有数据前后不要输出多余的空行,两组数据之间也不要输出多余的空行。

Sample Input

1
3

Sample Output

1 2 3
4 5 6
1 2 5
3 4 6

解题思路

代码

#include <stdio.h>
int main() {
	int list[5][6];
	int k=0;

	for (int a=2; a!=4; ++a) {
		for (int b=a+1; b!=6; ++b) {
			for (int c=2; c!=5; ++c) {
				if (c==a || c==b) {
					continue;
				}
				for (int d=c+1; d!=6; ++d) {
					if (d==a || d==b) {
						continue;
					}
					int (&ref)[6] = list[k++];

					ref[0] = 1;
					ref[1] = a;
					ref[2] = b;
					ref[3] = c;
					ref[4] = d;
					ref[5] = 6;
				}
			}
		}
	}
	while (scanf("%d",&k)!=EOF) {
		if (0<k && k<6) {//[1,6]
			--k;
			printf("%d %d %d\n%d %d %d\n",list[k][0],list[k][1],list[k][2],list[k][3],list[k][4],list[k][5]);
		}
	}
	return 0;
}

 

转载于:https://my.oschina.net/meiguizhinian/blog/873697

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值