发散思维能力 求1+2+3+...+n

2024-06-21 23:48
文章标签 发散 思维能力 +...+

本文主要是介绍发散思维能力 求1+2+3+...+n,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       发散思维的特点是思维活动的多向性和交通性,也就是我们在思考问题时注重运用多思路、多方案、多途径地解决问题。对于同一个问题,我们可以从不同的方向、侧面和层次,采用探索、转换、迁移、组合和分解等方法,提出多种创新的解法。

        问题:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)通常有三种解法:公式n(n+1)/2,递归和循环

// ====================方法一:利用构造函数求解====================
class Temp
{
public:Temp() { ++ N; Sum += N; }static void Reset() { N = 0; Sum = 0; }static unsigned int GetSum() { return Sum; }private:static unsigned int N;static unsigned int Sum;
};unsigned int Temp::N = 0;
unsigned int Temp::Sum = 0;unsigned int Sum_Solution1(unsigned int n)
{Temp::Reset();Temp *a = new Temp[n];delete []a;a = NULL;return Temp::GetSum();
}// ====================方法二:利用虚函数求解====================
class A;
A* Array[2];class A
{
public:virtual unsigned int Sum (unsigned int n) { return 0; }
};class B: public A
{
public:virtual unsigned int Sum (unsigned int n) { return Array[!!n]->Sum(n-1) + n; }
};int Sum_Solution2(int n)
{A a;B b;Array[0] = &a;Array[1] = &b;int value = Array[1]->Sum(n);return value;
}// ====================方法三:利用函数指针求解====================
typedef unsigned int (*fun)(unsigned int);unsigned int Solution3_Teminator(unsigned int n) 
{return 0;
}unsigned int Sum_Solution3(unsigned int n)
{static fun f[2] = {Solution3_Teminator, Sum_Solution3}; return n + f[!!n](n - 1);
}// ====================方法四:利用模板类型求解====================
template <unsigned int n> struct Sum_Solution4
{enum Value { N = Sum_Solution4<n - 1>::N + n};
};template <> struct Sum_Solution4<1>
{enum Value { N = 1};
};template <> struct Sum_Solution4<0>
{enum Value { N = 0};
};// ====================测试代码====================
void Test(int n, int expected)
{printf("Test for %d begins:\n", n);if(Sum_Solution1(n) == expected)printf("Solution1 passed.\n");elseprintf("Solution1 failed.\n");if(Sum_Solution2(n) == expected)printf("Solution2 passed.\n");elseprintf("Solution2 failed.\n");if(Sum_Solution3(n) == expected)printf("Solution3 passed.\n");elseprintf("Solution3 failed.\n");
}void Test1()
{const unsigned int number = 1;int expected = 1;Test(number, expected);if(Sum_Solution4<number>::N == expected)printf("Solution4 passed.\n");elseprintf("Solution4 failed.\n");
}void Test2()
{const unsigned int number = 5;int expected = 15;Test(number, expected);if(Sum_Solution4<number>::N == expected)printf("Solution4 passed.\n");elseprintf("Solution4 failed.\n");
}void Test3()
{const unsigned int number = 10;int expected = 55;Test(number, expected);if(Sum_Solution4<number>::N == expected)printf("Solution4 passed.\n");elseprintf("Solution4 failed.\n");
}void Test4()
{const unsigned int number = 0;int expected = 0;Test(number, expected);if(Sum_Solution4<number>::N == expected)printf("Solution4 passed.\n");elseprintf("Solution4 failed.\n");
}int _tmain(int argc, _TCHAR* argv[])
{Test1();Test2();Test3();Test4();return 0;
}

这篇关于发散思维能力 求1+2+3+...+n的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082689

相关文章

求1+2+...+n(Java)

题目: 求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 代码实现: public static int sum(int n){int result = 0;int a = 1;boolean value = ((n!=0) && a==(result = sum(n-1)));result += n;

【计算阶乘求和】计算1!+3!+5!+...+n!/(n+1)!

输入一个正整数n:     n为奇数,输出1!+3!+5!+...+n!     n为偶数,输出1!+3!+5!+...+(n+1)! 具体代码: #include<stdio.h>int main(){int sum=0;int n;printf("请输入n:");scanf("%d",&n);if(n%2==0);n++;for(int i=1;i<=n;i++){int p=1;fo

【CSP】阴阳龙_(拆解问题,构建方案,思考发散)

1. 问题背景与任务概述 背景:在题目中,我们面临一个庞大的遗迹群,神兽“阴阳龙”在其中移动。当阴阳龙现身时,遗迹中的员工可能会因阴阳龙的力量被移动到新的位置。任务的目标是模拟阴阳龙多次现身后,所有员工最终的位置,并通过这些位置计算出一个最终的异或值。 任务:核心任务是根据阴阳龙的现身位置及方向,计算出员工的新位置,并最终计算异或值。这涉及大量的二维坐标变换及判断操作。 2. 总任务划分

【剑指offer之求1+2+...+n】九度OJ-1506-求1+2+3+...+n

【题目链接】:九度OJ-1506-求1+2+3+…+n 【题目描述】: 题目 1506:求1+2+3+…+n 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1857解决:1060 题目描述: 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 输入: 输入可能包含多个测试样例。 对于每个

心觉:谁用,谁优秀的两种思维能力

举一反三和触类旁通这是两个超级无敌的思维能力 谁用,谁优秀 会用程度,决定了你的优秀程度 有些人可能只会一点点,L1级别 有些人可能是L5级别 有极少数的人可以达到L10最高级别,可以说是炉火纯青 既然是思维能力,自然也就可以通过练习获得 举一反三和触类旁通的本质以及它们背后的方法论都基于类比推理和知识迁移 这两种方法强调通过已有的知识或技能,推导出新知识或新应用场景,从而达到

用for和while循环求e的值[e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!]

/*编写程序,根据以下公式求e的值。要求用两种方法计算:1)for循环,计算前50项2)while循环,直至最后一项的值小于10-4e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!*/#include<stdio.h>//=====================================================//用for求e的值doubl

C语言PTA练习题(编程求1+3+5+...+n,编程求n的阶乘,爬楼梯,爬楼梯(扩展),猴子吃桃,猴子吃桃(扩展),求算式前n项的和,汉诺塔游戏)

7-1 编程求1+3+5+...+n 输入一个正整数n,编程求1+3+5+...+n 要求:用递归完成。 输入格式: 输入一行,只有一个整数n (1<=n<=9999) 这里n为奇数。 输出格式: 一个正整数,表示结果。 输入样例: 在这里给出一组输入。例如: 9 输出样例: 在这里给出相应的输出。例如: 25 #include<stdio.h>int digu

[剑指offer] 求1+2+3+...+n

题目内容 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 https://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?tpId=13&tqId=11200&tPage=3&rp=3&ru=/ta/coding-intervie

面试题46. 求1+2+...+n

面试题46. 求1+2+…+n 题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路: 不能用for和while,说明不能循环。可以用递归替代循环不能用if,else,case,说明不能用条件判断,可以用短路替代 public class Solution {public int

1+2+3+...+n不能用while、for、if else等实现

问题描述 求 1+2+ … +n ,要求不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句。 实际意义不大,题目涉及的知识还是不错的! 方法1 用构造函数求解。 #include <iostream> using namespace std; class Plus