打印 1--1000(不能使用条件运算符. 不能使用循环语句)(转自csdn论坛)

20121009记:看了一个帖子,决定记下来,记成word又怕忘了,决定放在这里

原帖连接:http://topic.csdn.net/u/20121004/21/b81b41ff-31f0-453c-848b-6427cc3fd234.html(不是本人的帖子)

注:部分代码为本人添加

题目:

打印 1--1000;
不能使用条件运算符.
不能使用循环语句.


Task:
 Print numbers from 1 to 1000 without using any loop or conditional statements. Don't just write the printf() or cout statement 1000 times.


代码:

//--------------------1-构造函数----------------------------//

class Print{
public:
	Print(){
		std::cout<<++i<<std::endl;
	}
private:
	static int i;
};
int Print::i = 0;

//int main(){
//
//	Print p[1000];
//
//	return 0;
//}

//--------------------2-析构函数----------------------------//

class Print2{
public:
	~Print2(){
		std::cout<<++i<<std::endl;
	}
private:
	static int i;
};
int Print2::i = 0;

//int main(){
//
//	Print2 p[1000];
//
//	return 0;
//}

//--------------------3-模版-构造函数----------------------------//

template <int I>
class Print3{
public:
	Print3(){
		std::cout<<I<<std::endl;
		Print3<I+1> p;
		p;
	}
};

template<>
class Print3<1001>{
};

//int main(){
//
//	Print3<1> p;
//	return 0;
//}

//--------------------4-模版-析构函数----------------------------//

template <int I>
class Print4{
public:
	Print4(){
		Print4<I-1> p;
		p;
	}
	~Print4(){
		std::cout<<I<<std::endl;
	}
};

template<>
class Print4<0>{
};

//int main(){
//
//	Print4<1000> p;
//	return 0;
//}

//--------------------5-宏定义----------------------------//

#define Out(i)       printf("%d\n", i++);
#define REP(N)       N N N N N N N N N N
#define Out1000(i)   REP(REP(REP(Out(i))));
//void main()
//{
// int i = 1;
// Out1000(i);
//}

//--------------------6-与运算符----------------------------//

void print()
{
     static int i = 1;
     (i - 1001) && (printf("%d ", i++)) && (print(), 0);	//这不算条件运算符吗?如不算,那么用三目运算符也可以吧!
}

//int main(){
//
//	print();
//	return 0;
//}

//--------------------7-递归----------------------------//

void print2(int i){
	std::cout<<i<<std::endl;
	(1000-i)?print2(i+1):1;
}
//int main(){
//
//	print2(1);
//	return 0;
//}

//--------------------8-一位网友的原话----------------------------//

//这类题大体有两种

//-1-//一种是禁用某种语法元素的,比如这一题,通常会禁用循环、条件、以及某些运算符,通常的方法是递归或利用某些“自动执行”的语法特性(如构造函数),这种题你就别考虑时空效率了,达成要求就是答题成功,几乎肯定比直观方法慢,因为就是在玩语法,根本不涉及算法改进

//-2-//另一种是禁用变量或限制变量,某些时候有一定意义,让程序员养成紧凑的编码习惯,现实中滥用变量的程序员很多,所以那种“只许用一个变量,完成XXX”的题基本还能看看,而限制过死又成了烂题,比如“不用变量,交换数据”,美其名曰“节省空间”,而事实上再弱的嵌入式也不在乎多声明几个整数,你真正需要注意的是数组和递归,而且,用变量也不一定浪费空间,arm、sparc、x64这些寄存器比较多的CPU,变量实际上是很可能被优化到寄存器里的,寄存器较少的x86的原则也是优先使用寄存器,而且编译器的优化能力几乎就是最佳方案(所以register关键字基本没用)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值