zoukankan      html  css  js  c++  java
  • 淘宝笔试题,受限的降序打印

    写一个函数: int print_num(int k){}; 要求函数功能为打印k的降序,直到0结束,即如果k=5,即打印: 5 4 3 2 1 0
    要求: 不能用 if , if else, switch, ?: , while, for , do while, goto 语句 

    解法1:利用构造函数和数组

     1 class Printer 
     2 { 
     3 public: 
     4  static int counter; 
     5  Printer() 
     6  { 
     7   cout<<counter<<endl; 
     8   counter--; 
     9  } 
    10 }; 
    11 int Printer::counter = 0;
    12 int print_num(int k) 13 { 14 Printer::counter = k; 15 Printer *pter = new Printer[k+1]; 16 delete[] pter; 17 return 0; 18 }

    解法2:利用编译器

    1 int print_num(int k) 
    2 { 
    3  printf("%d",k); 
    4  k&&print_num(k-1); 
    5  return k; 
    6 }
    1 003C13C4  call        @ILT+310(__RTC_CheckEsp) (3C113Bh)  // 秘诀在这里
    2     k&&print_num(k-1); 
    3 003C13C9  cmp         dword ptr [k],0  
    4 003C13CD  je          print_num+4Eh (3C13DEh)  
    5 003C13CF  mov         eax,dword ptr [k]  
    6 003C13D2  sub         eax,1  
    7 003C13D5  push        eax  
    8 003C13D6  call        print_num (3C102Dh)  

    在用if(a&&b)的时候,编译器会主动优化,a为false不会再继续判断b,这儿是一个道理

    解法3:?

  • 相关阅读:
    socket注意
    PCM音频文件编码
    题外:分类篇(音乐风格分类)基于BP神经网络
    MFCC特征提取过程详解
    语音信号分析
    k-means聚类
    c++关键字详解
    vs中项目解决方案和项目的关系
    条件编译#ifdef 和#endif
    c++快捷键
  • 原文地址:https://www.cnblogs.com/byang/p/2657449.html
Copyright © 2011-2022 走看看