挑战一个经典的算法题!高人

dfdqzp 2012-05-25 04:41:11
加精
实现一个函数,
计算1到n的和,当然n是变量

不能出现以下:
乘除操作,位操作,if-else,for,while,switch,?:三目运算符,全局变量,模版,标准库函数


高手贴代码吧
...全文
22496 420 打赏 收藏 转发到动态 举报
写回复
用AI写文章
420 条回复
切换为时间正序
请发表友善的回复…
发表回复
limengwe 2014-09-10
  • 打赏
  • 举报
回复
引用 163 楼 zhenzi_1989 的回复:
好题,学习了
引用 164 楼 zhao4zhong1 的回复:
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!
//实现一个函数,
//计算1到n的和,当然n是变量
//
//不能出现以下:
//乘除操作,位操作,if-else,for,while,switch,?:三目运算符,全局变量,模版,标准库函数。
//
#include <stdio.h>
int sum(int n) {
    __asm {
        push ebx
        push ecx
        xor eax,eax
        mov ebx,1
        mov ecx,n
    NEXT:
        add eax,ebx
        inc ebx
        loop NEXT
        pop ecx
        pop ebx
    }
}
void main() {
    printf("sum(1)=%d,sum(100)=%d\n",sum(1),sum(100));
}
//sum(1)=1,sum(100)=5050
jj fly
WHY_01 2014-08-08
  • 打赏
  • 举报
回复
引用 4 楼 akirya 的回复:
int x[]={0,1,3,6,10 , ....... };
printf( "%d\n" , x[n] );
数组x可以用其他程序生成。。。
这个叼~哈哈,你这直接暴力,犀利啊,要是楼主再规定内存,你不就跪了~
sinat_14982227 2014-08-03
  • 打赏
  • 举报
回复
~#46楼内容, 引用错了。
sinat_14982227 2014-08-03
  • 打赏
  • 举报
回复
引用 46 楼 chenkaiss 的回复:

//使用c++模板元编程可以实现
#include <iostream>

using namespace std;

template <int n> struct solution4_Sum
{
      enum Value { N = solution4_Sum<n - 1>::N + n};
};

template <> struct solution4_Sum<1>
{
      enum Value { N = 1};
};

int sum() {
	return solution4_Sum<100>::N;
}

int main() {
	cout << sum() << endl;
	return 0;	
}
高手啊, 看半天 才明白。 公式 n*(n+1)/2==>4*n*(n+1)/8 int类型为4字节 n用空间分配, 间接得到。 除以8, 用递归减法
烤鱼想睡觉 2014-03-18
  • 打赏
  • 举报
回复
int func(int n) { static int sum=0 ; n&&func(n-1); return sum += n; }
孩皮妞野 2014-02-08
  • 打赏
  • 举报
回复
引用 楼主 dfdqzp 的回复:
实现一个函数, 计算1到n的和,当然n是变量 不能出现以下: 乘除操作,位操作,if-else,for,while,switch,?:三目运算符,全局变量,模版,标准库函数 高手贴代码吧
来晚了,有正确答案了吗?

#include <stdio.h>

// sum 1 to n,
//不能有乘除操作,位操作,if-else,for,while,switch,?:三目运算符,全局变量,模版,标准库函数。

int one(int )
{
	return 0;
}

int sum(int n)
{
	typedef int (*fun)(int) ;
	fun f[2]={one,sum};
	return n+f[n>1](n-1);
}


int main()
{
	printf("%d, %d, %d\n", sum(1), sum(100), sum(1000));
	return 0;
}
rendason 2014-02-04
  • 打赏
  • 举报
回复
引用 20 楼 prohibit 的回复:
[Quote=引用 16 楼 的回复:] 测试了一下过了,结果正确。 嗯,不错,两行代码实现的。 只用一行代码可以么? 引用 12 楼 的回复: C/C++ code int func(int n, int *sum) { n&amp;&amp;func(n-1,sum); return *sum += n; } [/Quote]借用~~
int func(int n, int *sum)
    return (n && func(n - 1, sum), *sum += n);
}
return里怎么实现的?我是新手,麻烦解释一下。。。
五号智能 2013-12-15
  • 打赏
  • 举报
回复
这是挖坟贴,此东西,在N年前,就已经用创建对象的方式实现了.
hanfengguke 2013-11-16
  • 打赏
  • 举报
回复
引用 410 楼 u010211892 的回复:
[quote=引用 19 楼 akirya 的回复:] [Quote=引用 18 楼 的回复:] 大家再试着,不能出现 < == >等 比较符号 [/Quote]
typedef int ( *F )( int );
int f0( int n )
{
    return 0;
}
int fn( int n )
{
    F f[2] = {fn,f0};
    return n + f[!n]( n - 1 );
}
这代码让我自卑了,我恨你!!!![/quote] 同自卑,同恨!!!
坛子成长记 2013-10-28
  • 打赏
  • 举报
回复
我还没有学那么多呢
lsjfdjoijvtghu 2013-10-22
  • 打赏
  • 举报
回复
引用 19 楼 akirya 的回复:
[Quote=引用 18 楼 的回复:] 大家再试着,不能出现 < == >等 比较符号 [/Quote]
typedef int ( *F )( int );
int f0( int n )
{
    return 0;
}
int fn( int n )
{
    F f[2] = {fn,f0};
    return n + f[!n]( n - 1 );
}
这代码让我自卑了,我恨你!!!!
_奔跑的sheep 2013-10-20
  • 打赏
  • 举报
回复
c语言魅力无穷啊,佩服佩服
  • 打赏
  • 举报
回复
牛人太多了,受不了了
sleeping_dog 2013-08-09
  • 打赏
  • 举报
回复
可以考虑构造函数加静态数据成员,定义n个对象,调用n次构造函数实现n次相加
大尾巴猫 2013-08-01
  • 打赏
  • 举报
回复
呃,上面递归的时候用--n小失误,不得不再外面 n +1 小改一下,看起来和普通的递归就差不多了
#include <iostream>
using namespace std;

int funny_sum(unsigned int n)
{
	try
	{
		int test = 1 % n;
		return n + funny_sum(n - 1);
	}
	catch(...)
	{
		return n;
	}
}

int main()
{
	int result = funny_sum(100);
	cout << result << endl;
	return 0;
}
大尾巴猫 2013-07-31
  • 打赏
  • 举报
回复
我来个搞笑点的
#include <iostream>
using namespace std;

int funny_sum(unsigned int n)
{
	try
	{
		int test = 1 % n;
		return n + 1 + funny_sum(--n);
	}
	catch(...)
	{
		return n;
	}
}

int main()
{
	int result = funny_sum(100);
	cout << result << endl;
	return 0;
}
tor_gate 2013-07-17
  • 打赏
  • 举报
回复
n如果非常大,用字符串表示都非常长,各位的解法还成立吗,题目也没说n到底有多大
wjj952124796 2013-07-10
  • 打赏
  • 举报
回复
哎呀 学习了 虽写不出来 目前也只能看懂 少觉悟啊。
u011243399 2013-06-29
  • 打赏
  • 举报
回复
楼上各种神牛各种高级货啊,,小的在这儿各种膜拜学习。
RAMANUJA 2013-05-15
  • 打赏
  • 举报
回复
高手很多哈,学习了
加载更多回复(349)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧