第十二届蓝桥杯大赛模拟赛(第三期)java组:第四题:最长序列
问题描述:
对于整数 v 和 p,定义 Pierce 序列为:
a[1] = v
a[i] = p % a[i-1]
例如,当 v = 8, p = 21 时,对应的 Pierce 序列为
a[1] = 8
a[2] = 5
a[3] = 1
再往后计算,值变为 0,不在我们考虑的范围内。因此当 v = 8, p = 21 时, Pierce 序列的长度为 3。
当 p 一定时,对于不同的 v 值,Pierce 序列的长度可能不同。当 p = 8 时,若 1<=v<p,最长的 Pierce 序列出现在 v=13时,为(13, 8, 5, 1),长度为 4。
当 p=2021 时,最长的 Pierce 序列出现在 v=1160 时,请问这个序列有多长?
————————————————————————————————————————
分析:题目有点小问题,
我觉得应该改成,当 p = 21 时,若 1<=v<p,最长的 Pierce 序列出现在 v=13时,为(13, 8, 5, 1),长度为 4。
————————————————————————————————————————
public class Main4 {
public static void main(String[] args) {
int count = Integer.MIN_VALUE;
int temp = 0;
for(int i=1;i<2021;i++) {
//依次传入i到check中
//如果返回的值比当前count中的值大则覆盖,否则不做改变
temp = check(i, 2021);
if(temp>count) {
count = temp;
}
}
//输出最大的长度
System.out.println(count);
}
public static int check(int i, int p) {
//第一个数为i,所以count初始为1
int count = 1;
int temp = i;
while(true) {
if(i==0) {
break;
}
i = p%i;
//最后一次i会为0
if(i!=0) {
count++;
}
}
return count;
}
}