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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

1回答

1923閲覧

財布にある小銭を数え、1000円に達する最小の枚数を調べる

koto_koto

総合スコア0

C

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2020/11/16 11:47

c言語の問題です。
財布の中の小銭をすべて調べ、
最小の枚数で1000円に達する場合の小銭の種類と枚数を出力するプログラムを教えていただきたいです。財布の中の小銭がなくなった時は0以下の値を入力する。
以下の場合の処理は考えなくてよい
・財布の中の小銭の総額が1000円未満の場合
・小銭の枚数が100枚を超える場合
・小銭の種類を入力するときに不適切な数値を入力する場合

例:
1枚目の小銭の金額:50
2枚目の小銭の金額:100
...
10枚目の小銭の金額:50
11枚目の小銭の金額:-1
最小の枚数で1000円に達するのは
500円
100円
...
50円
の7枚です。

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

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

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

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

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

hentaiman

2020/11/16 11:50

引き算割り算余りとifとループを使いましょう
dodox86

2020/11/16 12:08

1000円に達すれば良いのですから、入力された小銭を高い金額順に並べ、1000円に達するまで高い順に取り出していけばよい(はず)です。 あと、本日初めての質問投稿で誤解されているのかもしれませんが、このteratailは質問と希望を書けば自動的に回答をもらえるようなところではないです。「質問するときのヒント」をご覧ください。https://teratail.com/help/question-tips
miyabi_takatsuk

2020/11/17 04:22

https://teratail.com/questions/304641 もそうですが、課題でしょうか? 課題なら自分でやりましょう。 そうでなくとも、自分でまずやってみて、どうしてもここがわからない、 という具体的かつ丸投げにならない質問にしましょう。
sage

2020/11/17 05:19

課題ならばteratailのような第三者ではなく、出題者に尋ねてください。 出題者にとっては何が分からないか、どこが分からないか、の貴重なフィードバックになりますから。 うまくフィードバックできれば(あなたにとって)授業の改善につながります。 第三者に尋ねても授業内容に変化がおきるはずがありません。
guest

回答1

0

現実世界でどうやるかを考えると,

  1. 財布から1枚取り出して手元に加える
  2. 手元の総額が1000円を超えている場合,総額が1000円を下回らない範囲で,手元の小銭のうち最も額が安いやつから順に捨てる

と手続きを,財布が空になるまで繰り返すだろうと思う.

という話を素直に実装した(もちろん効率はひどく悪い):

C++

1int main(int argc, char *argv[]) 2{ 3 const int Input[] = { 4 73, 100, 12, 5, 120, 46, 93, 7, 1, 133, 250, 101, 4, 49, 33, 478, 6, 106, 5 -1 //This value(<=0) is to indicate the end of input 6 }; 7 8 int n = 0; 9 int Sum = 0; 10 int Buff[100]; 11 { 12 const int *pInput = Input; 13 while( *pInput > 0 ) 14 { 15 Buff[n++] = *pInput; 16 Sum += *pInput; 17 18 while( Sum > 1000 ) 19 { 20 int *pMin = Buff; 21 for( int i=1; i<n; ++i ) 22 { 23 if( Buff[i] < *pMin ){ pMin = Buff+i; } 24 } 25 26 if( Sum - *pMin > 1000 ) 27 { 28 Sum -= *pMin; 29 *pMin = Buff[--n]; 30 } 31 else 32 { break; } 33 } 34 35 ++pInput; 36 } 37 } 38 39 //Result 40 for( int i=0; i<n; ++i ){ printf( "%d\n", Buff[i] ); } 41 printf( "n=%d, Sum=%d\n", n, Sum ); 42 43 return 0; 44}

投稿2020/11/18 05:35

fana

総合スコア11996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問