找回密码
 欢迎注册
楼主: wayne

[讨论] C/C++,打印整数1到1000,不使用循环,条件语言

[复制链接]
 楼主| 发表于 2011-7-13 18:20:51 | 显示全部楼层
三目运算符其实 有判断的功能,除此之外还有方法吗
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 18:36:42 | 显示全部楼层
可以试试用static

  1. #include <iostream>
  2. using namespace std;
  3. class Printer
  4. {
  5. public:
  6.     Printer() { static unsigned i=1; cout << i++ << endl; }
  7. };
  8. int main()
  9. {
  10. Printer p[1000];
  11. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 18:41:34 | 显示全部楼层
还有至少两种思路
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 18:43:06 | 显示全部楼层
#include
int foo(int n){
  printf("%d\n",n>1?foo(n-1):1);
  return n+1;
}
int main()
{
    foo(1000);
}

mathe 发表于 2011-7-13 18:08

很好!
#include
int foo(int n){
  printf("%d\n",n? foo(n-1): 1);
  return n+2;
}
int main()
{
    foo(999);
}
不知道为什么可以少递归1次?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 18:43:16 | 显示全部楼层
那个宏方法行数不会超标的,主要宏只需要定义10个(也就是10行)
另外我们还可以通过定义
#define P2(x) P(x); P(x+1)
#define P10(x) P2(x); P2(x+2); P2(x+4); P2(x+6); P2(x+8)
等方法进一步减少行数目。
如果不使用三目运算,还可以使用C异常,如

  1. int foo(int n){
  2.     printf("%d\n",n);
  3.     foo(n+1+1/(1000-n));
  4. }
  5. int main()
  6. {
  7.    try{
  8.     foo(1);
  9.     }catch(...){}
  10. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 18:45:08 | 显示全部楼层
本帖最后由 xbtianlang 于 2011-7-13 18:46 编辑

呵呵,递归次数是一样的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 18:45:31 | 显示全部楼层
10# mathe
好像没有997,,还得改改
  1. #include<stdio.h>
  2. #define P(x) printf("%d\t",x)
  3. #define P2(x) P(x);P(x+1)
  4. #define P4(x) P2(x);P2(x+2)
  5. #define P8(x) P4(x);P4(x+4)
  6. #define P16(x) P8(x);P8(x+8)
  7. #define P32(x) P16(x);P16(x+16)
  8. #define P64(x) P32(x);P32(x+32)
  9. #define P128(x) P64(x);P64(x+64)
  10. #define P256(x) P128(x);P128(x+128)
  11. #define P512(x) P256(x);P256(x+256)
  12. int main()
  13. {
  14.     P512(1);
  15.    P256(513);
  16.    P128(769);
  17.    P64(897);
  18.    P32(961);
  19.    P4(993);
  20.   P2(998);
  21. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 18:48:31 | 显示全部楼层
那就数错了弄一个更加容易实现的版本

  1. #define P printf("%d\n",x++)
  2. #define P2 P;P
  3. #define P10 P2;P2;P2;P2;P2
  4. #define P20 P10;P10
  5. #define P100 P20;P20;P20;P20;P20
  6. #define P200 P100;P100
  7. #define P1000 P200;P200;P200;P200;P200
  8. int main()
  9. {
  10.     int x=1;
  11.    P1000;
  12. }
复制代码

评分

参与人数 1威望 +6 鲜花 +6 收起 理由
wayne + 6 + 6 有才!!!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-7-13 18:51:52 | 显示全部楼层
18# mathe
mathe好狡猾
实质是2楼的思路
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-7-13 18:53:30 | 显示全部楼层
C++还可以使用STL,不过实际内部使用了循环

  1. #include<algorithm>
  2. #include <iostream>
  3. using namespace std;
  4. int a[1000];
  5. struct MyFun : public unary_function<int, void> {
  6.   void operator()(int& x)
  7.   {
  8.       cout<<x-a<<endl;
  9.   }
  10. };

  11. int main()
  12. {
  13.    MyFun f;
  14.     for_each(a,a+1000,f);
  15. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 16:17 , Processed in 0.049014 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表