下面是否有更简洁的方法来执行相同的任务?向下舍入到最接近的 1 或 5mod6
Is there a more succinct way of performing the same task below? Rounding down to nearest 1 or 5mod6
var n = 27;
void main() {
while (n>=5)
if ( (n) % 3==0 && (n) % 2==0 ){
print(n-1);
break;
}
else if ( (n) % 3==0 && (n) % 2!=0 ){
print(n-2);
break;
}
else if ((n) % 3!=0 && (n) % 2==0){
print((n/6).floor()*6 +(1));
break;
}
else { n=n+1;}
}
我一直在寻找一种方法将输入减少到最接近的 1 或 5mod6(对于 n>=5),并在 Dart 中想出了上面的代码(项目处于 flutter 状态)。有没有人有更好的方法来做同样的事情?
结果(向下舍入的输入)将被传递给另一个函数。
对于当前的 n 值 27,控制台将打印 25...尝试其他值 24 映射到 23、23 映射到自身、22、21、20 映射到 19、19 映射到自身、18 映射到 17、17 映射到本身,16,15,14 到 13.....我希望你明白了。
我会通过找到 6 的下一个较小的倍数然后加上 1 或 5 来摆脱循环。代码最终变得更短,我认为它比涉及 [=11 的代码更清楚地表达了你的意图=] 和 % 2
.
int lowerMultiple(int n, int multipleOf) =>
((n - 1) / multipleOf).floor() * multipleOf;
void main() {
var n = 27;
var m = lowerMultiple(n, 6);
print((n - m) >= 5 ? (m + 5) : (m + 1));
}
以上代码也适用于小于 5 的整数,包括非正整数。
var n = 27;
void main() {
while (n>=5)
if ( (n) % 3==0 && (n) % 2==0 ){
print(n-1);
break;
}
else if ( (n) % 3==0 && (n) % 2!=0 ){
print(n-2);
break;
}
else if ((n) % 3!=0 && (n) % 2==0){
print((n/6).floor()*6 +(1));
break;
}
else { n=n+1;}
}
我一直在寻找一种方法将输入减少到最接近的 1 或 5mod6(对于 n>=5),并在 Dart 中想出了上面的代码(项目处于 flutter 状态)。有没有人有更好的方法来做同样的事情?
结果(向下舍入的输入)将被传递给另一个函数。
对于当前的 n 值 27,控制台将打印 25...尝试其他值 24 映射到 23、23 映射到自身、22、21、20 映射到 19、19 映射到自身、18 映射到 17、17 映射到本身,16,15,14 到 13.....我希望你明白了。
我会通过找到 6 的下一个较小的倍数然后加上 1 或 5 来摆脱循环。代码最终变得更短,我认为它比涉及 [=11 的代码更清楚地表达了你的意图=] 和 % 2
.
int lowerMultiple(int n, int multipleOf) =>
((n - 1) / multipleOf).floor() * multipleOf;
void main() {
var n = 27;
var m = lowerMultiple(n, 6);
print((n - m) >= 5 ? (m + 5) : (m + 1));
}
以上代码也适用于小于 5 的整数,包括非正整数。