私は特定の解決策のために満たすためにかなり奇妙な要件を与えられました。要件は、現在の番号を指定して関数を記述し、2つ以上の連続する6を持つ番号を除外する次の連続する番号を見つけることです。
これまでのところ、いくつかの入力でテストした次のコード(C#)があり、動作します。私はそれが最も効率的な解決策ではないことを知っていますが、それは仕事をします、私はこれを行うためのより効率的な方法があるかどうかを見たいだけです。私がそれを行う方法は、数値を文字列に変換し、単純な正規表現を使用して、次のシーケンスが要件に応じて有効なシーケンスであるかどうかを確認することです。また、数が(2 ^ 31)-1の制限に達するとエラーがスローされることも認識していますが、現時点では問題ではありません。
public int GetNextSequenceNumber(int currentSequenceNumber)
{
var nextSequenceCandidate = currentSequenceNumber + 1;
var strNum = nextSequenceCandidate.ToString();
if (IsValidSequenceNumber(strNum))
{
return nextSequenceCandidate;
}
else
{
do
{
strNum = (++nextSequenceCandidate).ToString();
} while (!IsValidSequenceNumber(strNum));
return nextSequenceCandidate;
}
}
private bool IsValidSequenceNumber(string sequenceNumber)
{
return !Regex.IsMatch(sequenceNumber, "[6]{2,}");
}
除算とモジュラス演算を使用して、必要に応じて桁の位置とインクリメントを見つける別の方法があると思います。どんな入力でも大歓迎です、ありがとう!