C言語のアルゴリズム問題4ケタの抽選番号0010~9999の中から当選番号を決める。
AまたはBのどちらかに該当すれば当選番号する。
A 抽選番号が3の倍数である(例0360)
B 抽選番号のなかに3が含まれる(例1344)
私が思いつくことは、Aはなんとかなりそうです。
3で割ったあまりが0なら当選番号ですから。
Bがむずかしいです。抽選番号が2ケタなら10で割ったあまりが3ならBに該当する
とわかります。具体例13÷10=1あまり3、53÷10=5あまり3と判断できます。
if( 抽選番号%3 == 0 || 抽選番号%10 == 3)
しかし抽選番号が4ケタなのでそうもいきません。もしわかる方いればお願いします。
質問には「~中から当選番号を決める。」とありますが、この意味は、実際の宝くじのように、多数の番号から、あたりナンバーのリストを作ることを想定した問題でしょうか?
もし、そうであれば、出力する結果は、9980個 の番号すべてに対して、当選番号を抽出する動きを求められるので、アルゴリズムの中には、ループ処理を含める必要があるのではないかと考えています。
また、「0010~」という条件から、1桁目に存在する 3 の 約数・倍数を除外する意図が見えます。
このことから、単純に3で割るアルゴリズムでは不完全です。
なぜなら、単純な割り算だけのアルゴリズムでは "0003, 0006, 0009" の場合、当選条件 A ,B にヒットしてしまいます。
※ もっとも、学校から提示された課題(?)なら、そこまで厳密に考えていないかもしれません。
実際の仕事現場なら、出題側の意図をくみ取れず「仕様バグ」になりえる条件なので、出題者側に確認を求めたほうが良いと思います。
回答5件
あなたの回答
tips
プレビュー