質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

1375閲覧

4ケタの抽選番号0010~9999の中から当選番号を決める。

ceg34ry

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/06/18 10:08

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ケタなのでそうもいきません。もしわかる方いればお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoshi88

2021/06/18 19:29 編集

質問には「~中から当選番号を決める。」とありますが、この意味は、実際の宝くじのように、多数の番号から、あたりナンバーのリストを作ることを想定した問題でしょうか? もし、そうであれば、出力する結果は、9980個 の番号すべてに対して、当選番号を抽出する動きを求められるので、アルゴリズムの中には、ループ処理を含める必要があるのではないかと考えています。 また、「0010~」という条件から、1桁目に存在する 3 の 約数・倍数を除外する意図が見えます。 このことから、単純に3で割るアルゴリズムでは不完全です。 なぜなら、単純な割り算だけのアルゴリズムでは "0003, 0006, 0009" の場合、当選条件 A ,B にヒットしてしまいます。 ※ もっとも、学校から提示された課題(?)なら、そこまで厳密に考えていないかもしれません。 実際の仕事現場なら、出題側の意図をくみ取れず「仕様バグ」になりえる条件なので、出題者側に確認を求めたほうが良いと思います。
guest

回答5

0

プログラミングは「こう書けばいい」っていうものじゃないので、書き方はいくらでもあります。

なので私なら。っていうことで。


[方法1] int型配列で保持する

たとえば、

C

1int nums[4]; // これに { 1, 3, 4, 4 } のように入れておく

とかです。

こうすれば、『配列中に3があるかどうか』を調べればいいだけなので。

[方法2] char型配列(文字列)として保持する

たとえば

C

1char num[4]; // これに "1344" のように入れておく

とすれば、『文字列から'3'があるかどうかを調べる』だけでいいですし。

※ ちなみに 文字列……ではなく『文字』から整数に変換する方法は検索すれば普通にヒットします。

投稿2021/06/18 13:20

BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/06/18 13:21

ただし、「仕様に因る」。 たとえば、『int型変数のみで行え』とかみたいな感じで、問題文で定義されているとか。
guest

0

B 抽選番号のなかに3が含まれる(例1344

一旦文字列(例"1344" に変換し、文字'3'を探す。

※ ...出遅れたorz

投稿2021/06/18 12:45

編集2021/06/18 12:46
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

sprintf で文字列にして、strchr で '3' があるかどうかを見る。

C

1#include <stdio.h> // sprintf 2#include <string.h> // strchr 3 4int main(void) 5{ 6 int n = 1344; 7 char s[12]; 8 sprintf(s, "%d", n); 9 if (strchr(s, '3')) printf("%d has 3\n", n); 10}

投稿2021/06/18 12:08

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

4桁の文字列にして、そのなかに ’3’があればあたりになります。

C

1 char val[16]; 2 sprintf(val,"%04d",抽選番号); 3 if (val[0] == '3' || val[1] == '3' || val[2] == '3' ||val[3] == '3'){ 4 あたりの処理; 5 } 6

投稿2021/06/18 12:05

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

抽選番号%10 == 3 || (抽選番号/10)%10 == 3|| (抽選番号/100)%10 == 3 || (抽選番号/1000)%10 == 3

投稿2021/06/18 10:33

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問