我有一个字符串数组
"Ben", "Jim", "Ken"
如何打印上面的数组3次,如下所示:
"Ben", "Jim", "Ken"
"Jim", "Ben", "Ken"
"Ken", "Jim", "Ben"
我只是希望初始数组中的每个项目都显示为第一个元素。其他项目出现的顺序无关紧要。
更多例子
输入
"a","b","c","d"
输出
"a","b","c","d"
"b","a","c","d"
"c","b","a","d"
"d","a","c","d"
方法签名
public void printArray(String[] s){
}
答案 0 :(得分:2)
我没有给你直接的代码,而是试图解释这个问题的理论/数学。
我能解决这个问题的两个最简单的方法是
第一种方法需要您遍历索引,然后迭代遍历数组中的所有元素,并在必要时循环回到开头,当您返回原始元素时终止。
第二种方法需要你遍历索引,打印原始元素,然后从头开始迭代数组,跳过原始元素。
正如您所看到的,这两种方法都需要两个循环(因为您在数组中迭代两次)
在伪代码中,第一种方法可以写成:
for (i = array_start; i < array_end; i++) {
print array_element[i]
for (j = i + 1; j != i; j++) {
if (j is_larger_than array_end) {
set j equal to array_start
}
print array_element[j]
}
}
在伪代码中,第二种方法可以写成:
for (i = array_start; i < array_end; i++) {
print array_element[i]
for (j = array_start; j < array_end; j++) {
if (j is_not_equal_to i) {
print array_element[j]
}
}
}
答案 1 :(得分:0)
def fizz_buzz(n)
Array(1..12).map do |n|
if n % 3 == 0 && n % 5 == 0
'fizzbuzz'
elsif n % 3 == 0
'fizz'
elsif n % 5 == 0
'buzz'
else
n
end
end
end
result = fizz_buzz 12
# result => [1, 2, "fizz", 4, "buzz", "fizz", 7, 8, "fizz", "buzz", 11, "fizz"]
答案 2 :(得分:0)
for(int i=0;i<s.length;i++){
for(int j=i;j<s.length+i;j++) {
System.out.print(s[j%(s.length)]);
}
System.out.println();
}
使用 mod 适合此问题。第一个示例的打印值索引是这样的;
0 1 2
1 2 0
2 0 1
所以如果你像下面这样写它们并采用数组的长度mod(在这种情况下是3)你将得到解决方案。
0 1 2
1 2 3
2 3 4
答案 3 :(得分:0)
这听起来像是一个家庭作业问题,所以当我觉得我不应该回答它时,我会给出一个简单的提示。您正在寻找一种算法,该算法将给出元素的“for循环索引”的所有排列(组合),而不是元素本身。所以如果你有三个元素a,b,c它们的索引是0,1,2我们需要的是一种生成0,1,2的排列的方法所以这会导致一个常见的数学问题,一个非常简单的数学公式