2013-01-14 31 views
1

假設我有一個簡單的for循環,其索引爲i,從0n。我想i能夠循環每個循環產生以下順序兩個數字:生成特定的數字序列

i | a | b 
========= 
0 | 2 | 1 
1 | 2 | 3 
2 | 2 | 5 
3 | 5 | 1 
4 | 5 | 3 
5 | 5 | 5 
6 | 9 | 1 
7 | 9 | 3 
8 | 9 | 5 
9 | 12| 1 
10| 12| 3 
11| 12| 5 
12| 16| 1 
    ... 

基本上,該算法是,對於a2開始並遞增3和輪流4,而對於它總是經過1,35然後重新開始。

我一直在努力生產沒有太多結果的東西。我寧願在的答案,但僞代碼或任何非深奧的語言將會很好。

回答

3
class Main 
{ 
    public static void main (String[] args) 
    { 
     for(int i = 0 ; i < 20 ; i++) 
     { 
      int a = (i/6) * 7 + 2 + ((i/3) & 1) * 3; 
      int b = (i % 3) * 2 + 1; 
      System.out.println(i + " | " + a + " | " + b); 
     } 
    } 
} 
0

假設N = 20,我有以下溶液:

public static void main(String[] args) { 
    int i = 0; 
    int n = 20; 
    for (int a = 2; a <= n; a += 3) { 
     for (int b = 1; b <= 5; b += 2) { 
      System.out.println(i++ + " | " + a + " | " + b); 
     } 
    } 
} 
0

在C也可以是如下這是更容易閱讀和理解;

#include <stdio.h> 

int main(void) 
{ 
    int i = 0; 
    int N = 10; 
    int a = 2; 
    int b = 1; 
    int odd = 1; 

    printf("i |a | b\n"); 
    for(;i<N;i++) { 
    if(b == 5) { 
     if(odd) { 
     a += 3; 
     odd = 0; 
     }else{ 
     a+=4; 
     odd = 1; 
     } 
     } 
     b +=2; 
    if(b >5) b = 1; 
    printf("%d |%d | %d \n", i, a, b); 

    } 
    return 0; 
} 
0
for(int i = 0; i < n; i++){ 
    int a = ((i + 3)/6) * 3 + ((i + 0)/6) * 4 + 2; 
    int b = i % 3 * 2 + 1; 
    System.out.println(i++ + " | " + a + " | " + b); 
} 
1

突出部分爲它的樂趣,這是一個如何做它

(for [a (reductions + 2 (apply concat (repeat [3 4]))) 
     b [1 3 5]] 
    [a b]) 
0

嘗試(在C答)

int increments[3] = {2, 3, 4}; 
for(i = 0; i < limit; i++){ 
    if((i/3) % 3 == 0) a += increments[(i/3) % 3]; 
    b = 2 * (i % 3) + 1; 
}