试图找到翻转数字的模式

时间:2019-02-17 21:59:45

标签: java methods stdin

如果用户输入这样的数字(行数是任意的):

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

我只是对这里使用的模式感到困惑。

2 个答案:

答案 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