C语言强化十求 1+2+…+n | 要求:不使用关键字

大家51节快乐啦!劳动光荣!

1大早起来刷刷算法题,脑力劳动劳动,结果就发现了这么道神题~


通过这道题,你可以学会:

  • 用自己的语言去实现高级语言提供的快捷工具


题目:求 1+2+…+n,
要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等关键字和条件判断语句(A?B:C)


我了个去。。不能使用关键字,那不是自废武功吗??

淡定淡定~~想一想,当我们使用for、while的时候,高级语言都做了些甚么,他们那边的世界可没有for和while。

所以,for、while循环语句只是高级语言给用户提供的循环方式,我们完全可以自己做1个循环器出来!


思路
创建1个结构体(类),在其构造函数中对数字加1,
然后创建1个大小为N的该结构体类型的数组,
自然就会调用N次构造函数,也就实现了从1加到N


下面是我们自己设计的循环器的构造函数代码

Temp() { ++N; Sum += N; }

非常简单的代码实现,每次调用时都会履行代码块内的语句,

其实就相当于把for(int i = 1;i<n;i++){xxx}中的,xxx和i++放在我们自己设计的循环器的构造函数中。


代码

#include <stdio.h> #include<stdlib.h> #include <iostream> #include<sstream> #include <vector> using namespace std; /** 题目:求 1+2+…+n, 要求不能使用乘除法、 for、 while、 if、 else、 switch、 case 等关键字和条件判断语句(A?B:C)。 思路 for、while循环语句只是高级语言给用户提供的循环方式,我们完全可以自己做1个循环器出来。 方法: 创建1个结构体(类),在其构造函数中对数字加1,然后创建1个大小为N的该结构体类型的数组,自然就会调用N次构造函数,也就实现了从1加到N */ class Temp { public: Temp() { ++N; Sum += N; } static void Reset() { N = 0; Sum = 0; } static int GetSum() { return Sum; } private: static int N; static int Sum; }; //静态变量初始化 int Temp::N = 0; int Temp::Sum = 0; int solution1_Sum(int n) { Temp::Reset(); Temp *a = new Temp[n]; //new 出 n 个数组。 //烧毁对象,释放内存 delete []a; a = 0; return Temp::GetSum(); } void main() { cout<<solution1_Sum(100)<<endl; system(pause); }

运行图



怎样,是否是被这道神题洗脑啦,劳动节快乐!


总结:

有时候我们可以自己写代码去实现高级语言给我们封装好的工具。


相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...