C/C++拼图:使用单个for循环打印1..15 15..1中的值

Shu*_*ham 8 c c++ puzzle

我的同事给出了打印值1 2 3 4 .... 15 15 ..... 4 3 2 1只有一个for循环,没有函数,没有goto语句,没有使用任何条件语句或三元运算符.

所以我使用类型转换来解决它,但它不是一个精确的解决方案,因为15不打印两次.

int main()
{
    int i, j;
    for(i = 1, j = 0;j < 29;j++, i += int(j/15)*-2 + 1)
        cout<<i<<endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:1 2 3 4 ... 15 14 13 .... 2 1

任何替代方案?

use*_*136 32

您可以从1循环到30,然后使用(i/16)对于您的升序部分为"0"而对于您的降序部分为"1"的事实.

for (int i = 1; i < 31; i++)
{
    int number = (1-i/16) * i + (i/16) * (31 - i);
    printf("%d ", number);
}
Run Code Online (Sandbox Code Playgroud)


Fir*_*his 25

for (int i=0; i<1; i++)
{
    std::cout << "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1"
}
Run Code Online (Sandbox Code Playgroud)


Luc*_*ore 8

这个怎么样:

std::string first;
std::string second;

for ( int i = 1 ; i <= 15 ; i++ )
{
   std::ostringstream s;
   s << i;
   first += s.str();
   second = s.str() + second;
}

std::cout << first << second;
Run Code Online (Sandbox Code Playgroud)


oua*_*uah 5

替代方案:

static int bla[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};

for (int i = 0; i < 30; i++) 
{        
    printf("%d\n", bla[i]);
}
Run Code Online (Sandbox Code Playgroud)

好的,与所有人相比,执行速度更快......

  • 对downvote的解释好吗? (4认同)