ページ 11

わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 09:31
by える
課題が出たのですがよくわからないので回答していただける方お願いします。

# 次のようにキーボードから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:わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 09:57
by バグ
この課題の何が分からないのでしょうか?
質問はもう少し具体的にしていただかなければ、答えようがないです(^_^;)

Re:わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 10:06
by box
コンピュータ・プログラムによらずに
手でホームラン数とヒット数を求めるとしたら、
どういう手順を踏みますか?

Re:わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 10:10
by える
とりあえずこのように作ったのですが
#include <stdio.h>
#define N 4

int main(void){
int first;
int second;
int fir[N];
int sec[N];
int hits;
int homeruns;
int i,j;
printf("Input the 1st value >");
scanf("%d", &first);
printf("Input the 2nd value >");
scanf("%d", &second);

for(i=0;i<N;i++){
fir=first%10;
sec=second%10;
first = first/10;
second = second/10;
}
このあとどうしていいかわかりません。
教えてください

Re:わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 10:41
by たいちう
> このあとどうしていいかわかりません。
> 教えてください

まずfir[0]について考えて見ましょう。
もしsec[0]と等しければホームラン、
sec[1]かsec[2]かsec[3]と等しければヒットです。

次にfir[1]、fir[2]、fir[3]と順に判定すれば、
全体のホームランとヒットの数がわかります。

普通は2重のforループを使ったプログラムになると思いますが、
もしイメージしにくいならば、冗長になりますが1重のループで作るとか、
fir[0]についてだけ正しく判定できるプログラムを作るとか、
できることからやってみてください。

Re:わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 11:43
by Mist
http://www.play21.jp/board/formz.cgi?ac ... &rln=17819

問題の内容がこのトピとまったく同じですね。
同じ学校の人でしょうか?
参考までにどうぞ。

Re:わかる方回答お願いします・・・

Posted: 2008年6月30日(月) 13:14
by 管理人
ソースコードを投稿される場合は、プレタグをご使用下さい。
詳しくは規約をご覧下さい。

Re:わかる方回答お願いします・・・

Posted: 2008年7月01日(火) 00:08
by tk-xleader
作ってみました。ただ…、勢いだけで作ったので(動作確認はしてあるのですが…)下手くそなコードである事には間違いありません。
#include<stdio.h>

int main(void)
{
	int firstnum[4];
	int secondnum[4];
	int input1,input2;
	int hrcount,hitcount=0;
	
	/*入力を受け付ける。*/
	fputs("Input the 1st value >",stdout);
	scanf("%d",&input1);
	fputs("Input the 2nd value >",stdout);
	scanf("%d",&input2);
	
	/*それぞれの桁に分解する。*/
	{
		int i;
		for(i=0;i<4;i++){
			firstnum=input1%10;
			secondnum=input2%10;
			input1/=10;
			input2/=10;
		}
	}
	
	/*とりあえずホームランの数を勘定する。*/
	hrcount=(firstnum[0]==secondnum[0])+(firstnum[1]==secondnum[1])+
	        (firstnum[2]==secondnum[2])+(firstnum[3]==secondnum[3]);
	
	/*ホームランも含めたヒット数を勘定する。*/
	{
		int i;
		for(i=0;i<4;i++){
			int j;
			for(j=0;j<4;j++){
				hitcount+=(firstnum==secondnum[j]);
			}
		}
	}
	hitcount-=hrcount;
	
	/*結果を表示*/
	printf("%d hit%s %d home run%s\n",hitcount,((hitcount!=1)?"s":""),hrcount,((hrcount!=1)?"s":""));
	
	return 0;
}

意味は自分で考えてください(無責任~

ある意味<pre>タグ要らなかったかな?…

Re:わかる方回答お願いします・・・

Posted: 2008年7月01日(火) 09:21
by える
みなさんありがとうございました。一応、参考にしながら少し頑張ってみます!つまづいたらまた助けてください(すぐ来るかもです)よろしくお願いします(^O^)