如果用户输入这样的数字(行数是任意的):
1
2
3
4
5
我需要创建一个方法来进行如下一系列输出:
第一个输出:
1
2
3
4
5
第二个输出:
2
1
3
4
5
第三项输出:
4
3
2
1
5
第四次输出:
5
4
3
2
1
我只是对这里使用的模式感到困惑。
答案 0 :(得分:0)
我认为您必须在每次迭代i的中间从子序列翻转从0到i * 2 -1的子序列。 假设seq是输入序列的伪代码:
void pattern(seq){
print(seq)//First output
for(int i=1;i*2<=seq.length-1;i++){
seq = concatenate(seq.subSquence(i,i*2-1), seq.subSquence(0,i-1), seq.subSquence(i*2,seq.length-1) );
print(seq)
}
seq = concatenate(seq.subSquence(i,seq.length-1), seq.subSquence(0,i-1))
print(seq)//Last output
}
答案 1 :(得分:0)
您要做的是始终从原始结构(数组,列表)中取出next_element
并将其放置在顶部。(其他元素下降1,直到next element
初始位置)
next_element
从second_position开始,并以1递增,直到结构的结尾(长度或大小)
import java.util.Arrays;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args)
{
int a1[] = {1,2,3,4,5};
new Test().compute(a1);
int a2[] = {5,4,3,2,1};
new Test().compute(a2);
}
public void compute(int[] a)
{
for(int i=1;i<a.length;i++)
{
//i : next_element which will be place always on first_position
int temp= a[i];
//j : current_element (iterate by till next_element)
for(int j=i; j>0; j--)
{
a[j] = a[j-1];
}
a[0] = temp;
String str = Arrays.stream(a).boxed().map(t->String.valueOf(t)).collect(Collectors.joining(","));
System.out.println("step="+i+": array="+str);
}
}
}
输出
step=1: array=2,1,3,4,5
step=2: array=3,2,1,4,5
step=3: array=4,3,2,1,5
step=4: array=5,4,3,2,1
和(反向)
step=1: array=4,5,3,2,1
step=2: array=3,4,5,2,1
step=3: array=2,3,4,5,1
step=4: array=1,2,3,4,5