任何人都可以给我一个提示如何从下面的问题开始? (它是从练习3复制的链接:https://wiki.ittc.ku.edu/ittc/EECS168:Lab14)
我想过生成排列并检查它们是否可以通过交换2个相邻位置然后链接和计数来获得它们,但这一切看起来都非常复杂。 我正在使用的编程语言是C ++。 任何想法肯定会有很大的帮助。谢谢!
重新排列纸箱
贵校已经订购了一些装在一些非常重的纸箱中的设备。每个纸箱都有一个序列号,纸箱都排成一排。不幸的是,你的老师要求按特定的顺序放置纸箱,你忘了告诉那些卸下纸箱的人。您现在必须在教师到来之前快速将纸箱恢复到正确的顺序,并看到您如何搞砸了她的说明。由于纸箱很重,你不能长途携带。在每个步骤中,您所能做的就是交换两个相邻纸箱的位置。例如,假设纸箱上的序列号按照卸载顺序为34,29,12,78和90,纸箱的排列顺序为90,29,78,34,12这些纸箱可按所需顺序重新排列,交换次数最少为7次或更高,如下:
• Exchange 78, 90 — 34, 29, 12, 90, 78 • Exchange 12, 90 — 34, 29, 90, 12, 78 • Exchange 34, 29 — 29, 34, 90, 12, 78 • Exchange 12, 78 — 29, 34, 90, 78, 12 • Exchange 34, 90 — 29, 90, 34, 78, 12 • Exchange 29, 90 — 90, 29, 34, 78, 12 • Exchange 34, 78 — 90, 29, 78, 34, 12
在此示例中,可以显示需要最少7次交换以根据需要对纸箱进行重新排序。您需要重新排列它们并报告相邻纸箱所需的交换(不一定是最小值)的数量,以便达到所需的顺序。
输入格式:第一行输入是单个整数N,即纸箱总数。第二行由N个不同的正整数组成,用空格分隔,表示N个纸箱的序列号按卸载顺序排列。第三行是N个整数的另一个序列,表示应该重新排列N个纸箱的所需顺序。第三行中的数字序列保证是第二行中序列的排列。
输出格式:输出应为单个整数,即实现所需纸箱序列所需的交换次数。 以下是与上述示例相对应的示例输入和输出。
Sample input: 5 34 29 12 78 90 90 29 78 34 12 Sample output: 7
注意:您的程序不应打印除输出格式中指定的内容以外的任何内容。请在最终提交之前删除所有诊断打印报表。
答案 0 :(得分:-1)
显然,您不需要报告最小次数,只需任何足够数量的掉期。这让我想到了两个策略: