プログラミングがわかりません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mt_tm8

プログラミングがわかりません。

#1

投稿記事 by mt_tm8 » 18年前

このような問題が出たときどのように解いたらよいのでしょうか

# 次のようにキーボードから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)

asd

Re:プログラミングがわかりません。

#2

投稿記事 by asd » 18年前

> このような問題が出たときどのように解いたらよいのでしょうか

全く手がつけられないということでいいでしょうか?
まずは問題にもあるように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 同じ
*ホームラン数は3
 4.片方の数値のそれぞれの桁についてもう一方の数値に同じ数値があるかを調べる。同じ数字があればヒット数を+1する
例)1234と4321のとき
   1234 4321
一の位 4  4321 
       ~←同じ
十の位 3  4321
       ~←同じ
百の位 2  4321
        ~←同じ
千の位 1  4321
        ~←同じ
*ヒット数は4
 5.ホームラン数とヒット数を出力する

こんな流れになるかなと思います。
何となく雰囲気がつかめたでしょうか?
必要な処理としては、文字の入力、桁毎の数字チェック、結果出力になるかと思います。

よく分からないという場合は遠慮なく聞いてくださいね^^

toyo

Re:プログラミングがわかりません。

#3

投稿記事 by toyo » 18年前

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:プログラミングがわかりません。

#4

投稿記事 by 部長 » 18年前

もう遅いかも知れませんが↑のプログラムでは正しく動きません
例えば5353と5353の場合1番目の5と2番目の3はホームランになりますが3番目の5は最初の5でヒットになりbreakで抜けてしまいます。4番目の3も同じ理由でヒットになります。このプログラムはバグを完全になくそうと思うと意外と難しいです。私もバグなし作るのにちょっと手間取りましたw
たぶん学校の課題だと思いますが、これがはじめてのプログラムの授業で、これを完全にバグなしで提出しなければならないのなら結構えげつない先生ですねw

なぎ

Re:プログラミングがわかりません。

#5

投稿記事 by なぎ » 18年前

うむ。

> このプログラムはバグを完全になくそうと思うと意外と難しいです

そのために、「但し,4桁の各位の数は必ず互いに異なるものが入力されるとする」という条件がついている気がしますが。

部長

Re:プログラミングがわかりません。

#6

投稿記事 by 部長 » 18年前

あっすみませんそこ見てませんでした。
だとするとちゃっちいプログラムだな...
よく見たら入力2回とも自分がするんですね。答え丸わかり...
なんてアホなプログラムなんだ...
まあそれでもなるべく汎用性の高いプログラムを作ってほしいと思います。
余計なこと言ってすみませんでしたorz

toyo

Re:プログラミングがわかりません。

#7

投稿記事 by toyo » 18年前

最初はフラグ使って
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;
				}
			}
		}

みたいにしてたんですよ
同じ数字がないならホームランとヒットを同時に判定できるなということでああなりました

閉鎖

“C言語何でも質問掲示板” へ戻る