1 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:27:59 ] あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 前スレ C/C++の宿題片付けます 136代目 pc12.2ch.net/test/read.cgi/tech/1274827528/
511 名前: ◆QZaw55cn4c mailto:sage [2010/07/05(月) 18:29:52 ] >>501 codepad.org/GosjtHA7
512 名前:デフォルトの名無しさん mailto:age [2010/07/05(月) 20:24:06 ] >>507 問題文の 確率指定 p って何?>
513 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:28:32 ] あれだけISOの標準スタイルについて述べられていたのに未だに int main() 笑 の奴がいるとかw
514 名前: ◆QZaw55cn4c mailto:sage [2010/07/05(月) 20:28:45 ] >>457 >>505 codepad.org/7YlltRQG
515 名前: ◆QZaw55cn4c mailto:sage [2010/07/05(月) 20:34:19 ] >>513 pc12.2ch.net/test/read.cgi/tech/1269438098/101 で述べられ済み。 ISO/IEC 9899TC2 6.7.5.3 Function declarators (including prototypes) 14 An identifier list declares only the identifiers of the parameters of the function. An empty list in a function declarator that is part of a definition of that function specifies that the function has no parameters. とあり、関数の定義のときには、空のリストは no parameters である。 すなわち引数が void の場合と等価であり、int main() は int main(void) と同じ。
516 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:36:40 ] >>513 void main()でも別に構わんぞ コンパイル通ればいいんだよ
517 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:45:25 ] >>516 これには異論があり。 個人的には、int main() でコンパイルできる環境で、main() が引数をかえさない、という main() 側の都合で void main() と宣言するのには疑問がある。
518 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:51:48 ] ま〜たこの話題かw ちょっと前にもどっかのスレで泥沼化してただろう? だれか過去ログはっておやり。
519 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:53:34 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 四則演算と平方根を求める事が出来る電卓プログラムを作成せよ. [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン:visual C++ 2008 [3.3] 言語: C++ [4] 期限: 2010年7月7日22:00頃まで [5] その他の制限: 数学関数等は利用不可,関数ライブラリは標準入出力ライブラリ stdio.h のみを利用可 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10781.txt math.h等の利用が出来ないため平方根はニュートン法により求めるプログラムを使用したいと思っています. URLに記載した二つのプログラムを組み合わせて上記の条件を満たすような電卓プログラムを作りたいのですが, 私なりに見よう見まねで組み合わせて見たのですが,知識が足りず平方根を求める動作が働きません. 根本的に間違っている可能性もありますが,どなたか修正点を教えて頂けると幸いです. よろしくお願いいたします.
520 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:55:25 ] あのな、isoだかなんだか知らんが、そんなもんただの標準だろ。 守らなきゃいけないルールじゃない。 単にコンパイラやソースが標準に沿っていますということを表明できるだけの意味しかないんだよ。 この世にはmainが存在しないプログラムをCで書くケースだって腐るほどあるし、 エントリ関数がWinMain()になっている世界で最も普及したコンパイラだってあるんだぞ。
521 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:58:04 ] >>518 このスレの先々代(135)、3月〜4月にかけて宿題が欠乏し宿題解き人が暇になったために泥沼化した。 結論としては、規格の上では void main() も int main() も合法だったかと。
522 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 21:01:57 ] >>521 情報トンクス! ていうかこのスレだったかw
523 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 21:30:58 ] [1] 授業単元: Visual Studio 入門 [2] 問題文 3問ほどあるのでリンクを kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10782.txt [3] 環境 [3.1] OS:Windowsvista [3.2] Microsoft Visual Studio 2008 [3.3] 言語:c言語 [4] 期限:なし [5] 制限:なし 問題が多いのですがひとつお助けください
524 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 22:14:53 ] >>523 gccでの確認になりますが。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10784.txt
525 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 22:23:17 ] x(1)、 x(2)、・・・とaは2000次元ベクトルとします。 N Σ || x(n)-a || / N || ・|| はノルム。 を高速に計算する方法わかりますか。
526 名前: ◆QZaw55cn4c mailto:sage [2010/07/05(月) 22:30:05 ] >>523 codepad.org/QpeyhPJI codepad.org/zWPlVycN codepad.org/ysQFpPnA
527 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 22:32:14 ] X=(x, y) Y=(z, w) A=(a ,b) とすると、 ||X-A|| + ||Y-A|| = SQRT( (x-a)^2 + (y-b)^2 ) + SQRT( (z-a)^2 + (w-b)^2 ) を高速で計算したいという訳なんです。 2000次元だと、かけ算とSQRTが相当あって時間掛かりますが。 短縮する方法ありますか。
528 名前:527 mailto:sage [2010/07/05(月) 22:35:42 ] 面倒なので、 ||X-A|| = |x-a| + |y-b| と定義してしまうか。 すると、 |x-a| + |y-b| + |z-a| + |w-b| を求めるだけで簡単。
529 名前: ◆QZaw55cn4c mailto:sage [2010/07/05(月) 23:23:14 ] >>519 codepad.org/LQ8UIyYT キー入力の具合はこれでいいですか?
530 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:24:23 ] ◆QZaw55cn4c はもりもりがんばってるなぁ。 定期的に叩かれるみたいだけどがんばれ。
531 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:29:13 ] やってることは怠け者の成績を上げてやることだけどなw
532 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:31:38 ] >>530 叩いてもらえる、というのは、コードをみてくださっている、というありがたい反応ですから、ウェルカムです。 ちょっと前の、あいかわらず頭の変な奴にかかわってしまったのは失敗ですが、スルーすることにしました。 でも今日はおやすみなさいです。
533 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:51:43 ] >>532 じゃあたまにのぞいて気になるとこあったらレスすることにするよ。 っても地力ぼちぼちありそうに見えるんで、重箱の隅ぐらいしか突っ込めないかも。
534 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:53:45 ] [1] 授業単元: Visual Studio 入門 [2] 問題 半乱順列の関数作成 [3] 環境 指定なし [3.1] OS:Windowsvista [3.3] 言語:c言語 [4] 期限:なし [5] 制限:なし 半乱順列の関数を作ってください!お願いします!!
535 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:54:08 ] [1] 授業単元:C言語入門 [2] 問題文(含コード&リンク):data.txtに書かれている氏名と成績を読み込み、氏名を2次元配列、成績を1次元配列に格納せよ。 [3] 環境 [3.1] OS:Ubuntu 10.4 [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限:7/7まで [5] その他の制限: data.txtの中身は aoyama 36 oomura 42 sugiyama 50 morita 14 となっております。
536 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 00:06:46 ] >>535 >>476 は読み込んだあとソートしていますが、そのソート部分を削ればご所望のコードになるかと。
537 名前:535 mailto:sage [2010/07/06(火) 00:18:01 ] >>536 似た問題があったのですね。ありがとうございました。
538 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:11:53 ] >>529 お答え頂きありがとうございます。 動作は申し分無いのですがこのプログラムだとstdio.h以外にmath.h等の関数ライブラリが見られます。 すみませんがstdio .h のみで動作することを前提でお願いしたいと思います。 また、授業では本当に基礎的な内容のみしか扱っておらず、ネットや本を見て勉強している段階ですので、なるべく基本的な分かりやすい形でプログラムを組んでいただけたら幸いです。
539 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:15:25 ] このとき、穏やかな表情の>>529 の脳裏に、 慇懃無礼、という言葉が頭をよぎったという。
540 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:17:37 ] >>538 せっかく答えてくれた人に喧嘩売るのはやめようね
541 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:48:46 ] >>538 ソースよく読めよ
542 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:53:32 ] はいはい、もう答えなくて結構です
543 名前:デフォルトの名無しさん [2010/07/06(火) 17:44:44 ] int main() 笑 なんて使う奴はスルーしてヨシ!
544 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:04:56 ] 538です。 せっかく解答をして下さったにも関わらず、不快感を与える表現をしてしまいすみませんでした。 if 0とend ifの意味を理解していませんでした。 こちらの理解不足で本当に失礼しました。
545 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:17:15 ] ◆QZaw55cn4c は古い人間でしょ?コードの書き方でバレバレ
546 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:26:10 ] >>545 どの辺が古いの?
547 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:54:59 ] >>546 無理しないで良いよ、爺ちゃん。
548 名前:デフォルトの名無しさん [2010/07/06(火) 19:01:50 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): #include <stdio.h>typedef struct { char *fname, *mname, *lname; int byear, dyear; } writer_t; writer_t writers[] = { {"Edward", "Elmer", "Smith", 1890, 1965}, {"Robert", "Anson", "Heinlein", 1907, 1988}, {"Arthur", "Charles", "Clarke", 1917, 2008}, {"Isaac", " ", "Asimov", 1920, 1992}, {"Raymond", "Douglas", "Bradbury", 1920, 0}}; int main(void){ int i; char s[10]; for (i = 0 ; i < sizeof(writers)/sizeof(writer_t) ; i++){ printf("%c. ", writers[i].fname); if (writers[i].mname[0] != "\0") { printf("%c. %-10s", writers[i].mname[0], writers[i].lname); } else { printf("%-13s", writers[i].lname); } printf("%4s - ", writers[i].byear); if (dyear > 0){ printf("%4s", writers[i].dyear); } printf("\n"); } return 0;} 上記のエラープログラムを正しく直す。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: ([2010年7月28日20:00まで [5] その他の制限: なるべく簡潔に(新しい変数を定義したり)お願いします。見づらいですが改行が多いと怒られるので・・
549 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:09:55 ] お・に・い・ちゃ・ん、じゃなくて、お・じ・い・ちゃ・ん ♥
550 名前: ◆QZaw55cn4c mailto:sage [2010/07/06(火) 19:11:24 ] >>538 #if 0 から #endif までの間を削除してください。 わかりやすさについては、これが限界です。
551 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:12:43 ] >>543 pc12.2ch.net/test/read.cgi/tech/1269438098/101 で述べられ済み。 ISO/IEC 9899TC2 6.7.5.3 Function declarators (including prototypes) 14 An identifier list declares only the identifiers of the parameters of the function. An empty list in a function declarator that is part of a definition of that function specifies that the function has no parameters. とあり、関数の定義のときには、空のリストは no parameters である。 すなわち引数が void の場合と等価であり、int main() は int main(void) と同じ。
552 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:15:17 ] >>545 確かに古いといわれたらそうかもしれません。 func(a, b) int a; char *b; { ... return 0; } と書いていたころもありました。 setq とか car とか cdr とかを乱発していたこともあります。
553 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:17:21 ] >>494 お前がコテハンかトリップつけろ塵
554 名前: ◆QZaw55cn4c mailto:sage [2010/07/06(火) 19:18:17 ] >>544 いえいえ、全然。
555 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:22:15 ] >>553-554 コテハン付けたり、外したり大変だなw
556 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:24:57 ] >>555 専用ブラウザを使っていますから、簡単ですよ。
557 名前:デフォルトの名無しさん [2010/07/06(火) 19:31:06 ] >>547 >setq とか car とか cdr とかを乱発していたこともあります。 横レスだけど、そのネタはww [H|T] -> とか言い出さないようにw>>552 まあ、コード書けない煽りは無視で行きましょう。
558 名前: ◆GmgU93SCyE mailto:sage [2010/07/06(火) 19:34:15 ] >>548 codepad.org/Wng6j1dW
559 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:35:47 ] >>552 その頃は return (0); と書いてたりしないか?
560 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:37:06 ] >>557 処理系をCで書く、という解説本を集めているんです。でも、いまんところ2冊しかみつかっていません。 やっぱり、そんな本は売れないんですかね。おもしろいんですけれどね。
561 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:38:44 ] >>559 しまった!
562 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:39:30 ] >>560 訳されてない本が沢山あるよ
563 名前:デフォルトの名無しさん [2010/07/06(火) 19:51:18 ] >>560 ,562 Cに限らず、技術資料とかサンプルは英語の方が多いよね。 Google codeもよく使ったなあ。
564 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:51:18 ] お爺ちゃんお口くちゃ〜い、クソースなんて書くなよw
565 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:53:06 ] >>562 洋書まではあさる実力がない‥‥‥。でもながめてみたいもの。 著者名でよければ教えてください。
566 名前:デフォルトの名無しさん [2010/07/06(火) 20:06:48 ] >>558 ありがとうございました〜
567 名前:523 mailto:sage [2010/07/06(火) 20:42:03 ] >>526 >>524 回答ありがとうございます。 まさか一日かからずに終わらせてくれるとは思いませんでした。
568 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:09:00 ] C言語と関係無いじゃん。 OSやコンパイラを作るって事だろ。
569 名前:デフォルトの名無しさん [2010/07/06(火) 22:11:38 ] コインの種類(例えば、1円、5円、8円、10円、15円)に対して、金額を入力すると その金額を払うのに最も枚数が少なくて済むコインの出し方を出力してくれる プログラム。 例えば、23円と入力すると、「10円1枚・8円1枚・5円1枚の計3枚」と出力できるプログラムです。 ただし、「10円2枚・1円3枚の計5枚」は「最小」ではないため、上の出力を優先します。 入力された金額が負の場合は、「Error」を出力するようにします。 そこで、下のようなプログラムを書いたのですが、うまく起動しません。 このプログラムを、上の出力例のように出力してくれるように書きなおしてくれませんか?? 下のプログラムでは合計枚数を出力する部分しか書いてません。 ちなみに、再帰を使ってプログラミングお願いします。
570 名前:デフォルトの名無しさん [2010/07/06(火) 22:14:36 ] 569質問者のプログラム(続き) #include<stdio.h> int coinfunc(int *C, int k, int M){ /* *C・・・コインの種類の配列(小さい順にソートされているとする) M・・・支払う金額/ k・・・コインの種類の数 */ if(M == 0){ return(0); } else if(M < 0){ return(Error); } else{ int min = 100000; int i; for(i = 0; i <= k - 1; i++){ int tmp = coinfunc(C, k, M - C[i]); if(tmp < min){ min = tmp; } } return(min + 1); } } int main(){ int C[5] = {1,5,8,10,15}; int k = 5; int M; printf("支払う金額M="); scanf("%d",&M); printf("%d\n",coinfunc(C, k, M)); }
571 名前: ◆QZaw55cn4c mailto:sage [2010/07/06(火) 22:36:25 ] >>506 codepad.org/dYsw25Et 許容範囲云々は考えていません。
572 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:38:55 ] 明日までにある宿題あるんですけど頼めますかね? すぐ貼ります
573 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:40:44 ] 頼めます
574 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:42:55 ] >>572 ここまでは作った #include<stdio.h> int main(void) { return 0; }
575 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:54:22 ] [1] 授業単元:プログラミング演習 [2] 問題文:このプログラムを拡張して、個人ごと平均点と科目ごとの平均点を小数点以下1桁まで 表示できるプログラムを作成せよ。 #include <stdio.h> main() { int score[4][3]: int total[4]: int i , j ; for (i = 0; i < 4; i++) { total[i] = 0 ; printf("No . %d\n" , i + 1); for( j = 0 ; j < 3; j++) { printf("score %d : " , j + 1) ; scanf("%d", &score[i][j]); total[i] += score[i][j]; } } printf("\n"); printf("No . | s1 s2 s3 | total\n"); printf("---+----------+------\n"); for ( i = 0; i < 4; i++) { printf("%2d | " , i + 1) ; for( j = 0; j < 3; j++) { printf("%3d " , score[i][j]); } printf("| %4d\n" , total[i]) ; } }
576 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:56:36 ] 連投すみません [3]環境 Windows、VC6.0、C [4]期限 7月7日 [5]配列まで よろしくお願いします。
577 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:36:32 ] >>570 再帰は駄目だな、100円でいっぱいいっぱいだw #include<stdio.h> #include <limits.h> int coinfunc(int *c, int k, int m) { int i, tmp, min = INT_MAX; if (m == 0) return 0; else if (m < 0) return -1; for (i = 0; i < k; i++) { tmp = coinfunc(c, k, m - c[i]); if (tmp < 0) continue; else if (tmp < min) min = tmp; } return min + 1; } int main(void) { int m, c[] = {1, 5, 8, 10, 15}; while (scanf("%d", &m) != 1) scanf("%*[^\n]"); printf("%d\n", coinfunc(c, sizeof(c)/sizeof(*c), m)); return 0; }
578 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:38:48 ] 低額は計算済みにしておいて、再帰使えば。
579 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:45:42 ] 結局イタチごっこだろ じゃあ非再帰ならいいのかと思って試したら、100000000円くらいが限界だった(メモリ確保できず) 割り算で出来る貨幣制度にしろってこった
580 名前:デフォルトの名無しさん [2010/07/06(火) 23:50:38 ] コインに関する問題への解答ありがとうございます。 >>577 さんありがとうございます。 >>579 さん、非再帰の場合のプログラムをのせてください。お願いします。
581 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:53:49 ] >>580 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10789.c
582 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:56:49 ] 最終的には、低額の計算だけにできるだろ。 基本は、一番高いコインで、埋めていき、最後(低額)だけ考慮する。
583 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:59:29 ] 予想では、コインの最小公倍数になるまでは最大値のコインで支払って 最小公倍数を下回る所になったら、組み合わせを考慮する。
584 名前:デフォルトの名無しさん [2010/07/07(水) 00:01:27 ] <<579さん、ありがとうございます。 ここで、第2問↓↓ 今も上で議論されていますが、このプログラム(<<577)の効率の解析をしてください。 「ある重要な演算1つに注目し、その実行回数(最悪の入力時における)を、入力 サイズを表すパラメータの関数として表す。最終的にはT(n,...)=O(n^2×・・・) のような評価式を求めてください。」できれば、その式を求める過程をお願いします。
585 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:06:30 ] >>568 ええ、lisp 用として。
586 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:07:51 ] O(1)だろ。
587 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:08:29 ] >>582 確かにそれで大分削れそうだな
588 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:08:29 ] >>575 分かる人これも頼みます
589 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:26:32 ] >>583 #include<stdio.h> #include<stdlib.h> int gcd(int a, int b){ int c; while((c=a%b)) a=b, b=c; return b; } int lcm(int a, int b){ return a/gcd(a, b)*b; } void coin_func_r(int *result, int c[], int m, int n){ int i; if(m<0 || c[0]<0 || (*result>0 && n>=*result)) return; if(m==0){ if(*result<0 || *result>n) *result=n; return; } for(i=0;c[i]>0;i++) coin_func_r(result, c+i, m-c[i], n+1); } int coin_func(int c[], int amount){ int i, lcm_all=1, result=-1, rest, c_max=1; for(i=0;c[i]>0;i++){ lcm_all=lcm(lcm_all, c[i]); if(c_max<c[i]) c_max=c[i]; } rest=amount%lcm_all; coin_func_r(&result, c, rest, 0); return result+(amount-rest)/c_max; } int main(int argc, char *argv[]){ int c[]={15, 10, 8, 5, 1, -1}, x=100, result=-1; if(argc==2) x=atoi(argv[1]); result=coin_func(c, x); printf("%d\n", result); return 0; }
590 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:36:26 ] >>589 とてもいい感じだが、コインの最小公倍数の大きさに極めて依存 - int c[]={15, 10, 8, 5, 1, -1}, x=100, result=-1; + int c[]={777, 128, 100, 15, 10, 8, 5, 1, -1}, x=100, result=-1; // tekitou として 100000をコマンドライン引数で与えると帰ってこねえ 最小公倍数よりも範囲を狭くする方法はありそうだけどなぁ
591 名前: ◆QZaw55cn4c mailto:sage [2010/07/07(水) 00:37:41 ] >>575 codepad.org/VmHF0iio 表示具合の微調整はお願いいたします。
592 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:40:32 ] >>591 ありがとうございます! 本当に助かりました。
593 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 01:07:22 ] >>503 ありがとうございました!
594 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 01:58:42 ] >>551 そこでも述べられているがそれTC2
595 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:06:02 ] [1] 授業単元:プログラミング演習 [2]Q1. 問題文:4つの整数を入力し、それらを要素とする行列を求め、その値を以下のような 形式で表示するプログラムを作成せよ。 例 100 20 30 40と入力すれば | 100 20 | =3400 | 30 40 | と表示される Q.2ディスカウントストアでどの商品でも5個以上買えば1割引、10個以上で2割引、20個以上で 4割引となっていた。キーボードから買う商品の単価と個数を入力し、合計金額を計算するプログラミングを 作成せよ。 [3]環境 Windows、VC6.0、C [4]期限 7月8日 [5]配列よりちょっと前 Q.1に関してはできそうだったのですが、バーが表示されないために却下となってまいました。 皆さんにとっては大変簡単だと思いますがよろしくお願いします。 初心者ですみません。
596 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:10:06 ] >>551 ちがう。そういうことじゃない。ISO、ANSI準拠はプログラムの開始、主体となる関数を mainとし、引数がある時と無い時でどう記述するか、標準スタイルを提唱している。 ただし、それはあくまでも 標準スタイル であり、各自の環境によって準拠しなくても構わない。
597 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:12:37 ] また、main関数の戻り値はint型とする。これは散々既出だから議論する必要なし。 自分はどうこうすると、根拠も無く意味も分からないスタイルを用いると 他者とコードをやり取りする場合は、弊害が起こるかもしれないが。 そもそも、ここでは個人的なやり取り、スタイルが通用するが C言語は何も個人が私用で使うだけでなく、世界に通じて商業用としても 普通に用いられている。それは工業規格も同じ事。だから少しでも 幅広く通用するスタイル、規格というのが必要になる。 ちなみに、CDやDVDなどもISO準拠で世界で通用する方式、規格が使われている。
598 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:25:18 ] さらに、C++では引数が無い場合は int main() としている。 あくまでも ANSI、ISO準拠の標準スタイルの話。個人的なスタイルには言及せず。
599 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 05:44:31 ] >>590 最大のコインを選ぶか選ばないかのときだけやればいい。 777円が最大なら 777*2-1以上までは777円を選んでおいてokのはず。 一枚選べる最大価格は777*2-1円だからこの辺から調べる。
600 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 06:08:18 ] コインが100円と99円としたとき。 297円 = 99*3円で100円を選ぶと失敗するから 599は間違えだな。 やっぱどのコインの倍数でもある最小公倍数がよさげか。
601 名前:デフォルトの名無しさん [2010/07/07(水) 12:20:52 ] >>582 >最終的には、低額の計算だけにできるだろ。 >基本は、一番高いコインで、埋めていき、最後(低額)だけ考慮する。 >>11 を改造させてもらいました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10790.c
602 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 13:24:29 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10791.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: ([2010年07月10日22:00まで] [5] その他の制限: よろしくおねがいします!
603 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 15:23:20 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 10人の成績を入力し、その順位を成績と共に表示したい。以下の考えに基づいたプログラムを作成せよ。 1. 2次元配列s[10][2]を用意する。 2. i=0〜9のfor文を用いて、s[i][0]に成績入力する。 3. s[0][0]とs[j][0], j=0〜9を比較し、s[0][0]より大きい数値の個数nを考える。 その個数+1が成績順位になるので、s[0][1]にn+1を代入する。 4. 同様の操作をs[i][0]にi=0〜9に対して行えば、その成績順位がs[i][1]として求められるので、 あとは成績と共に表示すればいい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (VC 6.0) [3.3] 言語: C [4] 期限: ([2010年07月9日15:00まで] [5] その他の制限: 初心者で申し訳ないですが頼みます。
604 名前:デフォルトの名無しさん [2010/07/07(水) 15:25:25 ] >>603 >>421 ,427
605 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 15:28:54 ] >>604 おお同じ人がいたとはw ありがとうございます!
606 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 17:49:16 ] >>604 これC++用だからできなかったorz
607 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:00:51 ] >>606 codepad.org/HReXj7Ky
608 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:15:29 ] >>607 ありがとうございます。 感謝感謝です。
609 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:20:35 ] >>595 暇ならでいいんでこれも頼みます
610 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:35:12 ] >>609 Q2. codepad.org/Nhl8WS7Q
611 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:42:57 ] >>610 ありがとうございます。