HM095 缺省三数和
HM095 缺省三数和
来源: 第 95 集 函数高级-函数的默认参数
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
C++ 允许给形参写默认值。语法是在形参列表里写 类型 名 = 默认值。调用时如果传入了对应实参,必须用传入值;没传才用默认值。
例如 int addThree(int a, int b = 20, int c = 30):
addThree(10, 20, 30)得到 \(60\);- 只传
addThree(10)时 \(b,c\) 用默认值,仍得 \(60\); - 传
addThree(10, 30)时 \(b\) 用传入的 \(30\) 而不是默认 \(20\),再加默认的 \(c=30\),得到 \(70\)。
还有两条规则:
- 从左到右补全:某个位置一旦写了默认值,从该位置往右的每一个形参都必须有默认值。它左边可以没有。因此
int f(int a, int b = 10, int c = 20)合法,int f(int a, int b = 10, int c)非法;只给最后一个形参默认值合法,只给第一个却不给后面的非法。 - 声明与实现只能有一份默认值:函数可以拆成声明和实现。若声明里已经写了默认值,实现里就不能再写;反过来也一样。两边都写(即使数值相同)会报“默认参数重定义”;数值不同还会让编译器不知道该用哪一份,产生二义。
请实现带默认参数的 addThree。另有一份只在声明上写默认值的 addTwo(int a = 10, int b = 10),实现里不再写默认值。再按规则判断形参表和声明/实现是否合法。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一种询问:
C 1 a:调用addThree(a),输出三数之和。C 2 a b:调用addThree(a, b),输出三数之和。C 3 a b c:调用addThree(a, b, c),输出三数之和。R x y z:三个 \(0/1\) 依次表示第 \(1,2,3\) 个形参是否带默认值。按规则 1 判断,合法输出YES,否则NO。D d i:\(d=1\) 表示声明带默认值,\(i=1\) 表示实现带默认值。两边都为 \(1\) 输出REDEF,否则OK。S:无参调用addTwo(),用声明上的默认值计算并输出结果。
整数绝对值不超过 \(10^9\)。保证 C 询问的和在 \(32\) 位整数范围内。
输出格式
每个询问一行,行末换行。
样例
输入 #1
6
C 3 10 20 30
C 1 10
C 2 10 30
R 0 1 1
D 1 1
S
输出 #1
60
60
70
YES
REDEF
20
输入 #2
5
R 0 1 0
R 1 0 0
R 0 0 1
R 1 1 1
D 0 1
输出 #2
NO
NO
YES
YES
OK
说明
- 传入了就用传入值,没传才用默认值。
- 某个位置有默认值后,它右边必须都有;左边有没有无所谓。
- 声明和实现不能同时带默认参数。
S的 \(20\) 来自声明上的 \(10+10\),实现里不得再写一遍默认值。
信息
- ID
- 1094
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者