如何用一个 if 语句替换此代码?
How can I replace this code with one if statement?
为了挑战,我如何只用一个 if 语句替换这段代码?
unsigned int x, y;
cin>>x;
if((x>=0)&&(x<=1)) y = 1;
else if (x<=3) y = 2;
else if(x<=5) y = 3;
else y = 6;
创建一个 table 输入和输出:
0 — 1
1 — 1
2 — 2
3 — 2
4 — 3
5 — 3
Other — 6
现在创建一个逻辑表达式,将特定输入与“其他”区分开来。
x ≥ 0 and x ≤ 5
(注意:对于 unsigned
类型,您可以删除与 0 的比较)
现在创建一个公式,根据给定的输入计算给定的输出:
x / 2 + 1
不知道为什么要使用单个 if
,这很难说。当然,你可以使用没有任何 if
s 的三元运算符:
unsigned int x, y;
cin>>x;
y = x<=1
? 1
: x<=3
? 2
: x<=5
? 3
: 6;
或者一个 if
的丑陋的布尔转换黑客(请不要在拼图或 codegolf 上下文之外实际执行此操作):
unsigned int x, y;
cin>>x;
if (x<=5) {
y = 1 + (int)(x == 2 || x == 3) + (int)(x == 4 || x == 5);
} else {
y = 6;
}
或者,如果你坚持正好一个if
:
unsigned int x, y;
cin>>x;
if (x <= 5) {
y = x/2 + 1;
} else {
y = 6;
}
@Pietrek 的回答向您展示了使用三元运算符的更好变体(此处稍作修改):
unsigned int x, y;
cin>>x;
auto const cutoff = 6;
y = x < cutoff ? x/2 + 1 : cutoff;
请注意,在任何情况下,在使用 unsigned
数据类型时,x >= 0
始终为真,因此我省略了它。
如果这不是纯粹的拼图挑战而是实际的生产代码,请使用最后一个示例并将数字 6
设为 const
或 constexpr
并使用有意义的名称。
y = x <= 5 ? x / 2 + 1 : 6;
为了挑战,我如何只用一个 if 语句替换这段代码?
unsigned int x, y;
cin>>x;
if((x>=0)&&(x<=1)) y = 1;
else if (x<=3) y = 2;
else if(x<=5) y = 3;
else y = 6;
创建一个 table 输入和输出:
0 — 1
1 — 1
2 — 2
3 — 2
4 — 3
5 — 3
Other — 6
现在创建一个逻辑表达式,将特定输入与“其他”区分开来。
x ≥ 0 and x ≤ 5
(注意:对于 unsigned
类型,您可以删除与 0 的比较)
现在创建一个公式,根据给定的输入计算给定的输出:
x / 2 + 1
不知道为什么要使用单个 if
,这很难说。当然,你可以使用没有任何 if
s 的三元运算符:
unsigned int x, y;
cin>>x;
y = x<=1
? 1
: x<=3
? 2
: x<=5
? 3
: 6;
或者一个 if
的丑陋的布尔转换黑客(请不要在拼图或 codegolf 上下文之外实际执行此操作):
unsigned int x, y;
cin>>x;
if (x<=5) {
y = 1 + (int)(x == 2 || x == 3) + (int)(x == 4 || x == 5);
} else {
y = 6;
}
或者,如果你坚持正好一个if
:
unsigned int x, y;
cin>>x;
if (x <= 5) {
y = x/2 + 1;
} else {
y = 6;
}
@Pietrek 的回答向您展示了使用三元运算符的更好变体(此处稍作修改):
unsigned int x, y;
cin>>x;
auto const cutoff = 6;
y = x < cutoff ? x/2 + 1 : cutoff;
请注意,在任何情况下,在使用 unsigned
数据类型时,x >= 0
始终为真,因此我省略了它。
如果这不是纯粹的拼图挑战而是实际的生产代码,请使用最后一个示例并将数字 6
设为 const
或 constexpr
并使用有意义的名称。
y = x <= 5 ? x / 2 + 1 : 6;