找回密码
 欢迎注册
楼主: 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-11-21 20:54 , Processed in 0.025908 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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