一道pascal题求题目意思和思路(要详细)

无聊的军官(office.pas)【问题描述】每个学年的开始,高一的新生们都要进行传统的军训。今年有一个军训教官十分奇怪,他为了测试学员们的反应能力,每次吹哨后学员们都会... 无聊的军官
(office.pas)
【问题描述】
每个学年的开始,高一的新生们都要进行传统的军训。今年有一个军训教官十分奇怪,他为了测试学员们的反应能力,每次吹哨后学员们都会变换位置。每次左数第i位学员都会站到第ai个位置,经过若干次之后,队伍又会回到原来的样子。你的任务是计算n个人的队伍至少经过多少次之后,队伍恢复到原来样子。
【输入文件】
输入文件的第一行包含一个整数N(0<N<=10000),表示队伍的人数。
接下来N行,每行一个正整数ai表示左起第i个人接下来出现在左起第ai个位置上。
【输出文件】
仅包含一行,一个正整数m,表示军官最少的吹哨次数。
【输入输出样例】
输入
输出
5
2
3
4
5
1
5

【数据规模】
对于30%的数据,有N<=100;
对于100%的数据,有N<=10000;
对于全部数据,答案均在64位整数范围之内。
展开
 我来答
百度网友6fa3859
2015-08-25 · TA获得超过3349个赞
知道小有建树答主
回答量:1148
采纳率:85%
帮助的人:445万
展开全部
每行一个正整数ai表示左起第i个人接下来出现在左起第ai个位置上

是这里不清楚么。。就拿输入样例说,第二行的2即a1表示每次换位置,都将第1个人放到左数第二个位置;同理,第三行的3表示每次换位置,都将第2个人放到左数第3个位置。
这题有个简单解法,就是模拟换位置。假设有i个人,声明两个大小为i的整形数组,将其中一个初始化为:a[i] := i; 然后按照上面规则,模拟换队伍,将结果存到另一个数组里。用一个变量保存次数,这样数组第i个元素就表示第i个人最初所在的位置,检查终止时只需保证所有元素a[i] = i即可。
这种想法很简单,但是对于大规模的数据,想到耗时间,我就抛砖引玉,希望你能找到更好的解决方法。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式