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

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

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

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

Q&A

解決済

3回答

1151閲覧

比べ方がわからない

dsjfklsajkd

総合スコア12

C

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

0グッド

0クリップ

投稿2016/07/21 12:08

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
n はレシピに書かれている食材の数を表す整数
文字列 a と整数 t (1 ≦ i ≦ n) は、1人前あたりの食材 a が t だけ必要であることを表します。

同様に、b はあなたが所持している食材の数を表す整数
文字列 d と整数 c (1 ≦i ≦ b) は、食材 d を c だけ所持していることを表します。
所持している食材と量で最大何人前作れますか?

どのようにしたら見比べることができますか。
比べる方法がまったくわかりません

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

c

1 2#include<stdio.h> 3void main(void) 4{ 5 int i, n, t,b,c; 6 char a,d; 7 scanf("%d",&i); 8 for (n = 1; n <= i; n++) 9 { 10 scanf("%s",a); 11 scanf("%d", t); 12 } 13 scanf("%d", b); 14 for (n = 1; n <= b; n++) 15 { 16 scanf("%s", d); 17 scanf("%d", c); 18 } 19 20 getchar(); 21 getchar(); 22}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答3

0

ベストアンサー

(処理概要)
プログラムはインタラクティブに処理を行う事にします。
入力順は、メニューを入れて、その後で所持品を入力します。
所持品の入力が(=b数)終了したら何人前作成できるかを出力します。

(前提)
文字列aとbは食材名を表しています。
同じ食材名の複数入力は無いものとします。
材料にゼロ入力は発生しないものとします。

(判定方法)
メニューの食材が所持品に無ければ答えは0人前となります。
各々の食材の所持数をメニューで割ってその中で一番小さい整数人前を
答えとします。

(作成方針)
面倒ですが構造体を使います、構造体としてはメニューも所持も同じとします。
struct menu
{
char zaimei[64]; //食材名
int zairyu; //食材量
};
struct menu ar_menu[n]; //メニューリスト配列

c

1#include<stdio.h> 2#include<string.h> 3//構造体 4struct menu 5{ 6 char zaimei[64]; //食材名 7 int zairyo; //食材量 8 int ninmae; //人前 9}; 10 11void main(void) 12{ 13 int i, n, m, b, c; 14 char d[64]; 15 printf("How many (nemu):"); 16 scanf("%d",&i); 17 struct menu ar_menu[i]; //メニューリスト配列 18 memset(ar_menu, 0, sizeof(ar_menu[i])); //NULL clear 19 20 printf("nemus name & qty\n"); 21 for (n = 0; n < i; n++) 22 { 23 scanf("%s", ar_menu[n].zaimei); //食材名 24 scanf("%d", &ar_menu[n].zairyo); //食材量 25 } 26 printf("How many you have:"); 27 scanf("%d", &b); 28 printf("Your have name & qty:\n"); 29 for (n = 0; n < b; n++) 30 { 31 memset(d, 0, 64); 32 scanf("%s",d); 33 scanf("%d",&c); 34 for (m = 0; m < i; m++){ 35 if ( strstr(ar_menu[m].zaimei, d) != 0 ){ 36 ar_menu[m].ninmae = c / ar_menu[m].zairyo; 37 break; 38 } 39 } 40 } 41 int min; 42 for (m = 0; m < i; m++){ 43 if ( m == 0 ) min = ar_menu[m].ninmae; 44 if ( ar_menu[m].ninmae < min){ 45 min = ar_menu[m].ninmae; 46 } 47 } 48 printf("The answar is : %d\n", min); 49 getchar(); 50 getchar(); 51}

(プログラムだいたい説明)
メニューの入力を構造体の配列に保存します。
所持の入力の材料名で配列内を検索して(for loop)
有ったら人数前計算して構造体に保存します。

上記作成の配列は再度全読みして人前の最小値を見つけます。
材料がマッチしていないものが有る場合ゼロが入っているので(memset)
答えはゼロとなります。

投稿2016/07/22 05:43

A.Ichi

総合スコア4070

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

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

0

所持している食材と量で最大何人前作れますか?

作れる料理の数は、所持する食材/必要な食材で求められます。
食材を4所持していて、2必要なら割って、2人前です。
複数の食材が必要なら最小の食材に合わせます。

コードについてはさしあたり、Forループの中のscanf文が、
すでに質問者の方の意図と食い違っている気がします。
食材がひとつなら何回も入力する必要はないですし、
複数の食材を入力するなら、配列を使う必要があると思います。

投稿2016/07/21 12:26

LLman

総合スコア5592

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

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

0

あなたの持っている食材の一つ一つについて、その数をレシピに記されている同じ食材の数で割ってください。その最小のものが答えです。

砂糖を 5、塩を 8 持っていて、レシピに砂糖 2 塩 2 と書かれていたら、砂糖については 5 / 2 = 2...1、塩については 8 / 2 = 4、砂糖は 2 人前、塩は 4 人前もっているので、答えは 2 です。

投稿2016/07/21 12:15

Zuishin

総合スコア28660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問