“欲戴王冠,必承其重”——深度解析职责链模式

应项目需求,公司安排Jungle去成都出差一段时间。这不,Jungle刚结束出差生活,回到公司准备报销。算了一下,Jungle一共有大概50万的一笔小额票据需要报销。按照公司规定,Jungle得先去找自己的组长签字。

组长一看,“啧啧啧,我只能处理10万金额以下的报销,你这单子我签个字,你还得找兵哥(主管)签字”,于是Jungle又跑去找兵哥。

兵哥看了,“啧啧啧,我最多只能管金额不超过30万的单子,你得找春总(经理)签字”。Jungle又不厌其烦地找到了春总。

春总一看,“呵,50万,不少啊!但60万以下我都能做主,这单子我给你签了!要是超过60万,你这狗子还得去找老板!”Jungle总算松了一口气,一级一级网上找领导,也是不容易呀!

在单位,每个领导都有不同的审批权限,不同额度的报销单层层上报,最终到有权处理该金额范围的领导手里,该单子才算审批完成。这是Jungle所在的公司(相信也是大部分公司)的制度。如果要用代码来模拟这种制度,有没有一种模式可以参考呢?

答案是:有!那就是职责链模式! 

1.职责链模式简介

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 根据题意,德巴赫猜想是指,任一大于2的偶数都可以写成两个质数之和(严格说来,这是欧拉的等价描述版)。例如,6=3+3,8=3+5,18=7+11。这是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于2的偶数都能写成两个质数之和。(可能有多种情况,请输出两数差最大的那组) ### 回答2: 本题需要用到质数判断,以及暴力枚举等一些基本算法知识。 首先,需要写一个函数来判断一个数是否为质数。众所周知,质数是除了1和它本身之外没有其它因数的数,因此可以使用循环枚举2到该数的平方根之间的所有整数,判断是否有整除关系。 接着,对于大于2的偶数n,可以使用两个循环枚举可能的质数i和j,判断它们是否和为n。由于只有一组满足条件,因此可以设置一个flag变量来记录是否已经找到了一组解,找到时直接跳出循环。 最后,需要记录差值最大的一组解,并输出。可以设置两个变量maxDiff和maxPair来分别记录最大的差值和对应的质数对,每次找到一组解就判断它们的差值是否比当前最大差值更大,若是则更新maxDiff和maxPair。 下面是一个可能的实现程序: ``` #include <iostream> using namespace std; // 判断是否为质数 bool isPrime(int n) { if(n <= 1) return false; for(int i=2; i*i<=n; i++) { if(n % i == 0) return false; } return true; } int main() { int n; cout << "请输入一个大于2的偶数:"; cin >> n; if(n%2 != 0 || n<=2) { cout << "输入错误!" << endl; return 0; } int maxDiff = 0, maxPair[2] = {0}; bool found = false; for(int i=2; i<=n/2; i++) { if(isPrime(i)) { for(int j=i; j<=n/2; j++) { if(isPrime(j) && i+j==n) { found = true; if(j-i > maxDiff) { maxDiff = j-i; maxPair[0] = i; maxPair[1] = j; } break; } } } if(found) break; } cout << n << " = " << maxPair[0] << " + " << maxPair[1] << endl; return 0; } ``` 输入一个大于2的偶数,程序会输出符合要求的一组质数对,它们的差值最大。例如输入18,程序输出: ``` 18 = 5 + 13 ``` 其中,5和13是质数,它们的和是18,且它们的差值(即最大差值)是8。 ### 回答3: 哥德巴赫猜想是一个古老且著名的数学问题,它表明任何大于2的偶数均可以表示为两个质数之和。这一猜想在数学界引起了广泛的讨论和研究。虽然该猜想已经被证明在某种程度上是正确的,但依然存在许多未知的数学问题和难点。下面将介绍一个程序,用于验证哥德巴赫猜想。 程序设计: 1.输入一个偶数n(n>2)。 2.遍历所有小于n并且是质数的数值,将其存储到列表p中。 3.遍历p中的所有数值a,查找是否存在另外一个质数b,使得n=a+b。 4.如果找到了这样的a和b,计算它们的差值d,并将其存储到列表diff中。 5.如果找到了多组a和b,比较它们的差值d,并将最大的差值输出。 6.如果没有找到一组符合条件的a和b,则输出“无法验证哥德巴赫猜想”。 程序代码: ```python import math def is_prime(num): if num <= 1: return False for i in range(2, int(math.sqrt(num))+1): if num % i == 0: return False return True def get_primes(num): primes = [] for i in range(2, num): if is_prime(i): primes.append(i) return primes def goldbach(n): primes = get_primes(n) diff = [] for p in primes: if n-p in primes: diff.append(n-p-p) if diff: index = diff.index(max(diff)) print('输出两数差最大的那组:') print(n/2-diff[index]//2, n/2+diff[index]//2) else: print('无法验证哥德巴赫猜想') n = int(input('请输入一个大于2的偶数:')) goldbach(n) ``` 程序演示: 输入一个大于2的偶数:56 输出两数差最大的那组: 11.0 45.0 输入一个大于2的偶数:88 输出两数差最大的那组: 23.0 65.0 输入一个大于2的偶数:102 输出两数差最大的那组: 7.0 95.0 输入一个大于2的偶数:7 无法验证哥德巴赫猜想 总结: 以上程序通过查找所有可能的质数,验证了哥德巴赫猜想在目前所知条件下是成立的。但仍有许多数学家们正在努力研究这一问题,以期找到更加精确和全面的解决方案,揭示出数学世界的更深层次的奥秘。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯Jungle

您的支持是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值