【问题标题】:Generate a specific number sequence生成特定的数列
【发布时间】:2012-12-28 10:23:01
【问题描述】:

假设我有一个简单的 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
   ...

基本上,算法是,对于a,它以2 开头,依次递增34,而对于b,它总是经过13 和@ 987654334@ 然后重新开始。

我一直在尝试制作一些没有什么结果的东西。我更喜欢 的答案,但伪代码或任何非深奥的语言都可以。

【问题讨论】:

    标签: java java algorithm layout numbers sequence


    【解决方案1】:

    假设 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);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      在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;
      }
      

      【讨论】:

        【解决方案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);
                }
            }
        }
        

        【讨论】:

          【解决方案4】:
          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);
          }
          

          【讨论】:

            【解决方案5】:

            只是为了好玩,这就是中的做法:

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

            【讨论】:

              【解决方案6】:

              尝试(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;
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-08-15
                • 1970-01-01
                • 1970-01-01
                • 2011-04-16
                • 1970-01-01
                • 2012-04-03
                • 2011-02-02
                • 1970-01-01
                相关资源
                最近更新 更多