簡単 0件解決済み 正答率0%

最初の無効な年齢

入力された年齢を検証し、プログラムがクラッシュする代わりに最初の不正な入力位置を報告します。

このチャレンジで学べること

  • 文字列が数字だけか調べる
  • 数が範囲内か確かめる
  • 最初の不正な項目の位置を知らせる

問題

原文(英語)を表示

サインアップフォームは年齢を文字列として受け取ります。入力は、両端の空白を取り除いた後で、数字のみ(符号なし)からなり、その値が 0 以上 150 以下であるとき valid です。

最初の不正な入力を見つけて、フォームがユーザーにその箇所を示せるようにします。

first_invalid_age(values) を実装してください。

入力

values: 入力された年齢の一覧で、フォームの順序です。

出力

最初の不正な入力のインデックスを返します。すべて有効なら -1 を返します。

制約

0 ≤ 項目の数 ≤ 10,000

各項目は 20 文字以下

例

例 1
入力:
values = ["25", " 40 ", "abc", "200"]

期待される出力:
expected = 2
入力:
std::vector<std::string> values = {"25", " 40 ", "abc", "200"};

期待される出力:
long long expected = 2;
入力:
string[] values = new string[] {"25", " 40 ", "abc", "200"};

期待される出力:
long expected = 2;

解説

"25" と " 40 " (空白を除去すると)は有効です。index 2 の "abc" が最初の不正な入力です。

例 2
入力:
values = ["0", "150", "007"]

期待される出力:
expected = -1
入力:
std::vector<std::string> values = {"0", "150", "007"};

期待される出力:
long long expected = -1;
入力:
string[] values = new string[] {"0", "150", "007"};

期待される出力:
long expected = -1;

解説

3 つすべてが 0 から 150 の範囲の数字です(007 は 7 です)ので、答えは -1 です。

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

空白を取り除いてから、空でなく数字だけでできているかを調べます。

ヒント 2

そのあとで初めて値を 150 と比べます。

ヒント 3

マイナス記号があれば不正で、007 は正しい 7 です。

目安の計算量

時間 O(合計の長さ)、追加メモリ O(1)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。