Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;谜题:使用单个for循环打印1..15..1的值_C++_C_Puzzle - Fatal编程技术网

C++ C/C++;谜题:使用单个for循环打印1..15..1的值

C++ C/C++;谜题:使用单个for循环打印1..15..1的值,c++,c,puzzle,C++,C,Puzzle,它是由我的同事提供的,用于打印值1234。。。。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; }

它是由我的同事提供的,用于打印值
1234。。。。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;
}
intmain()
{
int i,j;
对于(i=1,j=0;j<29;j++,i++=int(j/15)*-2+1)
cout备选方案:

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]);
}
static int bla[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
对于(int i=0;i<30;i++)
{        
printf(“%d\n”,bla[i]);
}
好的一点是,它的执行速度比(int i=0;iXOR bit#4(即
j&0x10
)和位3:0的所有…

都要快。您需要找到一种方法将该位“重复”到4个位置。

这样如何:

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"
}
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;
std::字符串优先;
std::字符串秒;

对于(inti=1;i你可以从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);
}
for(int i=1;i<31;i++)
{
整数=(1-i/16)*i+(i/16)*(31-i);
printf(“%d”,数字);
}
用于(int i=1;i<30;i++)
printf(“%d\n”,(((i&16)>>4)+1)*i+((i&16)>>4)*(14-(i&15));
#包括
int main()
{
对于(inti=1;i<31;i++)std::cout我看到了许多复杂的答案,但没有人利用对称性

std::string head=“1”;
std::string tail=“1”;
for(无符号i=2;i!=16;++i){
std::string const elem=boost::词法转换(i);
头部=头部+“”+元素;
尾=元素+“”+尾;
}
标准::cout
for(int i=1;i
const int N=15;
对于(int i=1;i N)*(1+2*(N-i));
int main()
{


因为(inti=15,j=30,k=15;i
std::cout Shubham这不是作弊,这被称为跳出框框思考。这是面试官所期待的,而不是一些花哨的比特操作或数据结构技术:)我认为我们需要放松函数约束。没有函数,就没有C++。我想知道,如果有一种方法来定义这个函数,如果它的参数低于定义的常数,则它会返回0,如果参数更高,则返回1。但是,积分除法可能会有帮助,但是我想,有一种方法不使用它。,这很简单。@MatthieuM。我们可以定义两个可用的函数:main和printf(或std::cout.operatorPost工作代码),这样我就可以upvote@Pubby:我把它留作作业练习(我不习惯对家庭作业之类的问题给出完整的答案!)@OliCharlesworth:我需要做一些研究。使用逐位运算不太容易。有什么页面可以建议我阅读吗?@Shubham:例如……特别是,你可以利用0^15=15,1^15=14,2^15=13……这是对否决票的一种解释吗?我没有否决,但我相信,这是bypass,不是解决方案:)如果问题没有排除它,并且它不是预期的解决方案,那么问题的措辞就很糟糕。啊,废话。我错过了。printf是一个函数,所以是
main
:)我相信这个问题有一些缺陷。下次我会问一些问题,我会非常精确,不会在问题中留下任何漏洞。你使用了条件语句,这是被禁止的。@LuchianGrigore:你的显示不正确(没有空格):p@Spook:更正:)愚蠢的需求列表…你说得对。+1来自我。从15中减去结果,它将返回有效的序列:)我是一个numpty…总的来说是一个相当有趣的谜题
for (int i = 1; i < 30; i++)
    printf("%d\n", (-((i & 16) >> 4) + 1) * i + ((i & 16) >> 4) * (14 - (i & 15)));
#include <iostream>

int main()
{
    for(int i = 1; i < 31; i++) std::cout << ((i/16)-1)*-i+(i/16)*(i^0x1F) << " ";
    std::cout << std::endl;
}
std::string head = "1";
std::string tail = "1";

for (unsigned i = 2; i != 16; ++i) {
  std::string const elem = boost::lexical_cast<std::string>(i);

  head = head + " " + elem;
  tail = elem + " " + tail;
}

std::cout << head << " " << tail << "\n";
for (int i=1;i<31;++i)
{
  cout<<(((i<<27>>31|i)&(~i<<27>>31|~i))&15)<<" ";
}
const int N = 15;
for(int i = 1; i <= 2 * N; ++i)
    printf("%d ", i + (i > N) * (1 + 2 * (N - i)));
int main()
{

    for(int i = 15, j = 30, k = 15; i <= 30; i++, j--, k -= 2)
    {
        cout << (j - i) * (k % 2) << endl << (j - i - 1) * (k % 2) << endl;
    }

    return 0;
}