如何在给定的整数量上打印1,2,3,... N,(N-1),(N-2)

时间:2015-09-26 14:35:18

标签: c++ algorithm

我已经卡住了算法来打印这个数字,让我们说我们有11个整数,N的最大值是5然后我们必须像这个1 2 3 4 5 4 3 2 1 2 3。有人可以给我一些想法或算法来打印这个数字

5 个答案:

答案 0 :(得分:3)

在任何类C语言(C ++,C#,Java,JavaScript等)中,您都可以编写

int N = 5;
for(int i = 1; i < N; i++)
{
     // Print i:
     // System.out.print(i + " "); in Java
     // Console.Write(i + " "); in C#
     // cout << i << " "; in C++
}

for (int i = N; i >= 1; i--)
{
     // Print i
}

答案 1 :(得分:1)

递归版;

void printNum(int val, int max) {
    printf("%d\n", val)
    if (val < max) {
       printNum(val+1,max);
       printf("%d\n", val)
    }
}
printNum(1,5);

答案 2 :(得分:1)

没有分支在一个循环中:

constexpr static const int N = 5;
for(int i = 0; i < 11; ++i)
    std::cout << (N - std::abs(i % ((N - 1) * 2) - (N - 1))) << ' ';

产生

  

1 2 3 4 5 4 3 2 1 2 3

答案 3 :(得分:0)

一些伪代码

var nmax = 11
var N = 5
var i = 1
var numbersPrinted = 0
var increment = +1
While numbersPrinted <nmax
{
  if (i = N and increment = +1) or (i = 1 and increment = -1) then increment = -increment

  i = i + increment
  numbersPrinted = numbersPrinted +1
  print i
}

答案 4 :(得分:-2)

在Java中:

class slcal {
    public static void main(String[] args) {
        int Nmax = Integer.parseInt(args[0]);
        int N = Integer.parseInt(args[1]);
        int t = 1, k = 1;       
        while (t <= N) {
            for (; k <= Nmax && t <= N; k++, t++)
                System.out.print(k);
            for (k = Nmax - 1; k > 0 && t <= N; k--, t++)
                System.out.print(k);
            k = 2;
        }
    }
}

产地:

  

1 2 3 4 5 4 3 2 1 2 3