このような問題が出たときどのように解いたらよいのでしょうか
# 次のようにキーボードから4桁の10進数の入力を2回受付ける.
Input the 1st value > 6479
Input the 2nd value > 1497
但し,4桁の各位の数は必ず互いに異なるものが入力されるとする.
# 入力された数値に対して,以下に定義する「ヒット数」と「ホームラン数」を求める.
* ホームラン数: 二つの数字を同じ位ごとに比較した時,何ヶ所の位について一致しているかを表す.
* ヒット数: 二つの数字を異なる位同士で比較した時,一致している組み合わせの数を表す.
例
1234と1234の場合,0ヒット4ホームラン
1234と4321の場合,4ヒット0ホームラン
6479と1497の場合,2ヒット1ホームラン
# ヒット数とホームラン数を次のように表示する.
2 hit(s) 1 home run(s)
プログラミングがわかりません。
Re:プログラミングがわかりません。
> このような問題が出たときどのように解いたらよいのでしょうか
全く手がつけられないということでいいでしょうか?
まずは問題にもあるように2回入力を受け付けないといけません。
> # 次のようにキーボードから4桁の10進数の入力を2回受付ける.
> Input the 1st value > 6479
> Input the 2nd value > 1497
1. "Input the 1st value > "と表示して1つ目の数字を入力受付
2. "Input the 2nd value > "と表示して2つ目の数字を入力受付
次に2つの数字のそれぞれの桁を調べていきます。
3.2つの数字のそれぞれ同じ桁同士を比較する。同じ数字の場合はホームラン数を+1する
こんな流れになるかなと思います。
何となく雰囲気がつかめたでしょうか?
必要な処理としては、文字の入力、桁毎の数字チェック、結果出力になるかと思います。
よく分からないという場合は遠慮なく聞いてくださいね^^
全く手がつけられないということでいいでしょうか?
まずは問題にもあるように2回入力を受け付けないといけません。
> # 次のようにキーボードから4桁の10進数の入力を2回受付ける.
> Input the 1st value > 6479
> Input the 2nd value > 1497
1. "Input the 1st value > "と表示して1つ目の数字を入力受付
2. "Input the 2nd value > "と表示して2つ目の数字を入力受付
次に2つの数字のそれぞれの桁を調べていきます。
3.2つの数字のそれぞれ同じ桁同士を比較する。同じ数字の場合はホームラン数を+1する
例)1234と1254のとき 1234 1254 一の位 4 4 同じ 十の位 3 5 百の位 2 2 同じ 千の位 1 1 同じ *ホームラン数は34.片方の数値のそれぞれの桁についてもう一方の数値に同じ数値があるかを調べる。同じ数字があればヒット数を+1する
例)1234と4321のとき 1234 4321 一の位 4 4321 ~←同じ 十の位 3 4321 ~←同じ 百の位 2 4321 ~←同じ 千の位 1 4321 ~←同じ *ヒット数は45.ホームラン数とヒット数を出力する
こんな流れになるかなと思います。
何となく雰囲気がつかめたでしょうか?
必要な処理としては、文字の入力、桁毎の数字チェック、結果出力になるかと思います。
よく分からないという場合は遠慮なく聞いてくださいね^^
Re:プログラミングがわかりません。
4桁の数字をそれぞれ配列に入れて2重ループで比較すれば良いと思います
hit = 0; homerun = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (n1 == n2[j]) { /* 数字が一致 */ if (i == j) { /* 場所も一致 */ homerun++; } else { /* 場所が違う */ hit++; } break; } } } printf("%d hit(s) %d home run(s)\n", hit, homerun);
Re:プログラミングがわかりません。
もう遅いかも知れませんが↑のプログラムでは正しく動きません
例えば5353と5353の場合1番目の5と2番目の3はホームランになりますが3番目の5は最初の5でヒットになりbreakで抜けてしまいます。4番目の3も同じ理由でヒットになります。このプログラムはバグを完全になくそうと思うと意外と難しいです。私もバグなし作るのにちょっと手間取りましたw
たぶん学校の課題だと思いますが、これがはじめてのプログラムの授業で、これを完全にバグなしで提出しなければならないのなら結構えげつない先生ですねw
例えば5353と5353の場合1番目の5と2番目の3はホームランになりますが3番目の5は最初の5でヒットになりbreakで抜けてしまいます。4番目の3も同じ理由でヒットになります。このプログラムはバグを完全になくそうと思うと意外と難しいです。私もバグなし作るのにちょっと手間取りましたw
たぶん学校の課題だと思いますが、これがはじめてのプログラムの授業で、これを完全にバグなしで提出しなければならないのなら結構えげつない先生ですねw
Re:プログラミングがわかりません。
うむ。
> このプログラムはバグを完全になくそうと思うと意外と難しいです
そのために、「但し,4桁の各位の数は必ず互いに異なるものが入力されるとする」という条件がついている気がしますが。
> このプログラムはバグを完全になくそうと思うと意外と難しいです
そのために、「但し,4桁の各位の数は必ず互いに異なるものが入力されるとする」という条件がついている気がしますが。
Re:プログラミングがわかりません。
あっすみませんそこ見てませんでした。
だとするとちゃっちいプログラムだな...
よく見たら入力2回とも自分がするんですね。答え丸わかり...
なんてアホなプログラムなんだ...
まあそれでもなるべく汎用性の高いプログラムを作ってほしいと思います。
余計なこと言ってすみませんでしたorz
だとするとちゃっちいプログラムだな...
よく見たら入力2回とも自分がするんですね。答え丸わかり...
なんてアホなプログラムなんだ...
まあそれでもなるべく汎用性の高いプログラムを作ってほしいと思います。
余計なこと言ってすみませんでしたorz
Re:プログラミングがわかりません。
最初はフラグ使って
みたいにしてたんですよ
同じ数字がないならホームランとヒットを同時に判定できるなということでああなりました
for (i = 0; i < 4; i++) { if (n1 == n2) { homerun++; n1 = 10; /* チェック済みのフラグとして10以上の数字に変更 */ n2 = 20; } } for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (n1 == n2[j]) { hit++; break; } } }
みたいにしてたんですよ
同じ数字がないならホームランとヒットを同時に判定できるなということでああなりました