您的任务是创建一个程序,当给定一组股数和一个辫子的迭代次数时,该程序将指示每条链的去向。规则如下:
left和right。当你开始的时候,left会有更多的链。投入7:
/ / / / \ \ \
1 2 3 4 5 6 7////middle\\\之间。1次输入7的迭代(第1串被移动到中心):
/ / / \ \ \ \
2 3 4 1 5 6 7输入:
3 4计算:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2输出:
3 1 2strands [space] iterations发布于 2014-05-11 15:54:12
~\),(@{:^1$[=]:y-.,2//y*^~}*;' '*输入必须在stdin上提供。
示例(您可以测试在线):
> 7 1
2 3 4 1 5 6 7
> 3 4
3 1 2
> 11 2
2 3 4 5 6 11 1 7 8 9 10发布于 2014-05-11 22:32:47
s,n=map(int,raw_input().split())
b=range(s)
for i in range(n):b[s/2:s/2]=[b.pop(0-i%2)]
for x in b:print x+1,s,n=map(int,input().split())
b=list(range(s))
for i in range(n):b[s//2:s//2]=[b.pop(0-i%2)]
for x in b:print(x+1,end=' ')这段代码一定是被Python 2贿赂的,以展示它相对于Python 3的优势:范围是列表,除法是整数,打印不是开始换行符。奇怪的0-i%2是因为-i%2计算为(-i)%2。
可能有一种比迭代更有效的方法,即直接计算每个最终结果。编织手术的周期是2*s,所以不会那么复杂。
发布于 2014-05-12 18:38:21
高尔夫球:
import java.util.*;class B{public static void main(String[] a){int n=Integer.valueOf(a[0]),t=Integer.valueOf(a[1]),i=0;List<Integer> r=new ArrayList<Integer>();for(;i<n;i++){r.add(i+1);}for(i=0;i<t;i++){int k=i%2==0?0:n-1;r.add(n/2,r.remove(k));}System.out.println(r);}}非高尔夫:
import java.util.*;
public class Braid {
public static void main(String[] args) {
int num = Integer.valueOf(args[0]);
int iterations = Integer.valueOf(args[1]);
//populate array
List<Integer> arr = new ArrayList<Integer>();
for (int i=0; i < num; i++) {
arr.add(i+1);
}
for (int i=0; i < iterations; i++) {
int index = i%2==0?0:num-1;
arr.add(num/2, arr.remove(index));
}
System.out.println(arr);
}
}在线运行
https://codegolf.stackexchange.com/questions/26934
复制相似问题