- 1 名前:デフォルトの名無しさん [2008/02/04(月) 23:32:19 ]
- あなたが解けない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++の宿題を片付けます 103代目 pc11.2ch.net/test/read.cgi/tech/1200318925/
- 768 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:55:46 ]
- >>765
正しい自己言及文を生成する問題。 「」の中の数字の数と文章の内容を確認すれ。
- 769 名前:デフォルトの名無しさん [2008/03/25(火) 03:04:03 ]
- 0、1、・・・N-1と並べて、
0の個数をカウントしてそれを記録 次に1の個数をカウントして記録 もしその個数に0が現れれば0を更新 それにも1が現れれば1の個数を更新 ・・・・ 無限に値が更新される事はなく次へ進めるとは思う たとえば0が現れるのは桁上がりが現れるときだから(何度か更新を繰り返したとすると) 一度に0がいくつも増えなくては行けなくなりいつか停止すると思う
- 770 名前:デフォルトの名無しさん [2008/03/25(火) 03:07:45 ]
- 解ありをちゃんと説明してくれれば後は簡単なんだ だれか頼む
- 771 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 03:14:53 ]
- 「1が1個」
↓ (あ、1の数が変わった。更新しよう) ↓ 「1 が 2 個」 ↓ (あ、1の数が1個にもどった。更新しよう) ↓ 無限ループ。
- 772 名前:デフォルトの名無しさん [2008/03/25(火) 03:17:33 ]
- 解無しも有るのか・・・
- 773 名前:デフォルトの名無しさん [2008/03/25(火) 03:25:48 ]
- nがn個ってなったら駄目なんだな
そうなる所はカウントを保留しておき個数が変化するのを待ってカウントするか 簡単にはできそうにないね 巡回セールスマンと同じ種類では?
- 774 名前:871 mailto:sage [2008/03/25(火) 03:27:12 ]
- (さっき Python スレで突っ込まれた)
ちなみに、Nの意味はN以上の数が出てこないって解釈で。すると N=1 のときは解なし。 N=2 も解なし。 N=3 も解なし。 N=4 では 「0が1個、1が3個、2が1個、3が3個」 「0が1個、1が2個、2が3個、3が2個」 N=10 ってのは「"10"という部分文字列の数」という解釈にしようと思う。
- 775 名前:デフォルトの名無しさん [2008/03/25(火) 03:29:53 ]
- N=1は解あるだろ
0が1個じゃないの? 間違えている?
- 776 名前:デフォルトの名無しさん [2008/03/25(火) 03:31:13 ]
- N=2 0が1個、1が2個では? どこか間違えている?
- 777 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 03:31:36 ]
- N以上が現出するとダメらしい。
- 778 名前:871 mailto:sage [2008/03/25(火) 03:34:29 ]
- 「0が1個」
だと、0については言えてるけど、 1について言及が無いので美しくない(俺的に) できれば文章中に出てくる全ての数字について言及させたい。 だから <N 以上の数を使わない>てルールをつけたんだ。
- 779 名前:デフォルトの名無しさん [2008/03/25(火) 03:34:50 ]
- そしたら総当たりの有限時間では解判定は出来るんだな
その制限を外した場合は>>771のような無限ループは発生するのだろうか?
- 780 名前:デフォルトの名無しさん [2008/03/25(火) 03:44:13 ]
- N以上が現れない場合でも、簡単には求められないよな
試行錯誤か、全パターンを生成して文書チェックするかくらいで いずれにしても時間がかかる 例えばN=1000を一日以内に解くプログラムとかは作れないんじゃないか?
- 781 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 04:38:11 ]
- 0が1個、1が12個、2が3個、3が2個、4が1個、5が1個、6が1個、7が1個、8が1個、
9が1個、10が1個、11が1個、12が2個、13が1個、14が1個。
- 782 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 04:57:56 ]
- >>781
その文章中の0は2個ありそうだ。 例えば11という数字があった場合、1として2個で11として1個と数えるのか、 それとも11という塊になっている場合は1としてはカウントしないのか。
- 783 名前:デフォルトの名無しさん [2008/03/25(火) 04:59:50 ]
- 111は、1が3つ、11が2つ、111が1つ
ですよね
- 784 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 05:01:08 ]
- こういう問題の場合数えないのが普通だと思うけど。
- 785 名前:デフォルトの名無しさん [2008/03/25(火) 05:04:00 ]
- 異なるものがいくつあるのか正しく求めるのが正解のはずだ
783が正解
- 786 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 05:14:04 ]
- 数値の組み合わせ(順序数, 順序数と個数自身を含めた個数)について無矛盾にする問題とみなすか、
文章から得られる全ての部分文字列の集合内の数値に相当する要素の個数について無矛盾にする問題とみなすか。
- 787 名前:デフォルトの名無しさん [2008/03/25(火) 05:18:23 ]
- これはやる意味ないと思っている
巡回セールスマンと同じく多項式時間では解けないというやつと思う プログラム作るだけ時間の無駄と思っている
- 788 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 11:22:49 ]
- 0が2 1が8 2が3 3が3
4が1 5が1 6が1 7が1 8が2 9が1 10が1
- 789 名前:デフォルトの名無しさん [2008/03/25(火) 11:25:04 ]
- 一般Nで解けるソースはりつけてよ
- 790 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 11:53:54 ]
- const int N = <整数>
std::string S[N]; int count(int num){ int sum=0; std::string substr = <num の文字列表現> for(int i=0; i<N; ++i) { std::string i2s = i の文字列表現 sum += <文字列 i2s に含まれる substr の数> sum += <文字列 S[i] に含まれる substr の数>; } return sum; } int check(){ for (int i=0; i<N; ++i) { if (count(i) != <文字列S[i]の整数表現>) return; } printf("----\n"); for (int i=0; i<N; ++i) printf("%d が %s\n", i, S[i]); } void find(int depth) { if (depth < 0) { check(); return; } for (int i=0; i<N; ++i) { S[depth] = <i の文字列表現>; find(depth-1); } void main() { find(N-1); }
- 791 名前:名無しです [2008/03/25(火) 12:20:30 ]
- 流れを切って申し訳ありません
>>704の問題ですが >>738さんのでやると連結成分分解のプログラムの動作を確認できるんですけど,ずっと同じ出力結果なんです。 出力結果の数字が何を指しているのかわからないのでどのような意味なのか教えてもらえないでしょうか? 幅優先探索での連結成分分解もよくわからないので作っていただけないでしょうか? よろしくお願いします
- 792 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 13:42:01 ]
- >>789
間違ってるかもしれないし、厳密解でもない ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6174.c
- 793 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 15:38:35 ]
- 763って個数の合計はN*2に決まってるんだから
対数時間で計算出来そうにみえるけど ナップザック系とは関係なくないか
- 794 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 16:26:33 ]
- >>763
面白いな
- 795 名前:デフォルトの名無しさん [2008/03/25(火) 20:59:56 ]
- コード貼るならここがいいよ
ttp://codepad.org 実行結果までやってくれる
- 796 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:48:06 ]
- [1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6176.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6177.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン:gcc 3.4 VC 6.0 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:明日の夜まで [5] その他の制限:ほとんど素人が手をつけ始めたくらいの知識しかないです。だから難しいことはしてないかも。 何問か課題を出されたのですがどうしてもこの2つが分かりません。よろしくお願いします。
- 797 名前:796 mailto:sage [2008/03/25(火) 21:49:55 ]
- 申し訳ありません。OSと言語のこと忘れてました。
OSはwindowsで言語はC言語です。
- 798 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:55:15 ]
- >>796
一問だけ解いてみた #include <stdio.h> int main(void){ int i, j; for(i=0;i<26;i++){ for(j=0;j<=i;j++) putchar('A'+i); for(;j<=26;j++) putchar('Z'-i); putchar('\n'); } return 0; }
- 799 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:01:47 ]
- >>763
やってみたけど問題としてはツマンナイ答えしかでないっぽいよ。 いいアルゴリズム探す気力なくなったの途中でやめました.. ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6178.c
- 800 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:08:22 ]
- >>799
対応しているのは N=10 まで?
- 801 名前:799 mailto:sage [2008/03/25(火) 22:10:25 ]
- 10行目まちがえた。適当でごめん
× if( c[ a[ i ] ] != 1 ) ○ if( c[ i ] != 1 )
- 802 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:13:38 ]
- 800
N=19ぐらいまで。それ以上でも正解は同じパターン一個っぽい。 (のでそれ以上追求するのやめました。)
- 803 名前:796 mailto:sage [2008/03/25(火) 22:16:38 ]
- >>798
ありがとうございます。putchar使えば良かったのですね。
- 804 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:18:17 ]
- >>802
N=11 のときに 0 と 1 の個数が違うんだが…
- 805 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:28:36 ]
- >>796
下の奴適当にやってみた 曜日を調べるのは「C言語 曜日」でぐぐって一番上の奴使った ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6179.txt
- 806 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:14:47 ]
- >>800のやつを貼付けてみた。
ttp://codepad.org/3hP8x4xd
- 807 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:32:13 ]
- >>791
全部のグラフで同じ出力結果になるってこと? 出力結果はただ単に、到達可能な点をまとめて{ }で囲んで表示してるだけ 出力結果が何を指しているのか分からないってことは、 >>738のプログラムがあってないってことなんで、幅優先探索は作れない
- 808 名前:デフォルトの名無しさん [2008/03/26(水) 10:24:33 ]
- >>796
1番目の問題の表示例は AZZZZZZZZZZZZZZZZZZZZZZZZZZ BBYYYYYYYYYYYYYYYYYYYYYYYYY CCCXXXXXXXXXXXXXXXXXXXXXXXX の間違いか? AZZZZZZZZZZZZZZZZZZZZZZZZZZZ BBYYYYYYYYYYYYYYYYYYYYYYYYYY CCCXXXXXXXXXXXXXXXXXXXXXXXXX だと26行目は ZZZZZZZZZZZZZZZZZZZZZZZZZZAA になってしまうぞ。
- 809 名前:デフォルトの名無しさん [2008/03/26(水) 20:37:58 ]
- [1] 授業単元: プログラミング演習
[2] 問題文:5人のテストの点数をキーボードから入力し、合計と平均を表せ。 [3] 環境 [3.1] OS: Windows・Linux/ [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 明日まで 初期的な問題ですがお願いします。
- 810 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 20:55:18 ]
- >>809
#include<stdio.h> int main() { int i, test[5], sum = 0; for (i=0; i<5; i++) { printf("%d人目の点数を入力してください:", i+1); scanf("%d", &test[i]); sum += test[i]; } printf("合計:%d 平均:%f\n", sum, (double)sum / 5); }
- 811 名前:デフォルトの名無しさん [2008/03/26(水) 23:19:00 ]
- test+iでええやん。
- 812 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:25:25 ]
- >>811
君は一年後自分のレスを思い出してこう言うだろう 「認めたくないものだな、自分自身の若さ故の過ちと言うものを。」
- 813 名前:812 mailto:sage [2008/03/26(水) 23:27:41 ]
- おれは今自分自身の過ちを後悔している
コピペ元が間違ってた orz 「認めたくないものだな。自分自身の、若さ故の過ちというものを。」
- 814 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:55:53 ]
- ガノタ乙
と言って欲しいんだろ?
- 815 名前:デフォルトの名無しさん [2008/03/27(木) 00:01:02 ]
- >>812-813
なんだこいつ・・・
- 816 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 00:07:28 ]
- それより>>811の解説してくれ
- 817 名前:812 mailto:sage [2008/03/27(木) 00:18:13 ]
- >>816
シンタックスシュガーを知ったばかりなので使いたがっている状態
- 818 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:08:39 ]
- 糖衣構文でええやん。
- 819 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:17:54 ]
- ところで、
>>44 > /* 文字列の長さ */ > for(str_length=0; str[str_length]; str_length++) {} ではなく str_length = sizeof (str) - 1; だと思うが。
- 820 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:20:36 ]
- >>811
そもそもtest[5]はscoreでええがな
- 821 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:30:33 ]
- >>819
わざわざ「文字列の長さ」と書いてあるんだから配列の大きさを基準にしちゃダメじゃないか?
- 822 名前:デフォルトの名無しさん [2008/03/27(木) 09:03:35 ]
- >>817
こいつもしかして、test[i]こそがシンタックスシュガーだということを知らないのでは・・・
- 823 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 10:49:45 ]
- >>816
test[i]は*(test+i)のシンタックスシュガー &test[i]は&*(test+i)のシンタックスシュガー &*ってムダじゃね?ってことだろ。
- 824 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:09:52 ]
- 糖衣だろうがなんだろうが &test[i] なんて書き方はしねーよ
- 825 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:17:26 ]
- それが、&test[i]の方が多数派だったりするんだよw
- 826 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:29:03 ]
- 確かに&test[i]って記述はよく見かけるね
俺は個人的に好かない書き方だ Cの配列とアドレッシングとの関連がわかってないのかな
- 827 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:00:27 ]
- 俺はCだと基本どうでもいい。所詮、構文糖。
が、C++だと&a[i]とa+iの意味が違う事がある。(std::vector等)。 STL等のランダムアクセス可能なコンテナだと&a[i]は使えるけどa+iは使えない。 そうなるとCを使うときもC++の流儀に合わせて&a[i]と書きたくなる。
- 828 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:21:10 ]
- vectorで&a[i]なんて何に使うんだ?
- 829 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:45:00 ]
- char*を要求する関数を呼び出すときとか
- 830 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:55:40 ]
- char*ならstd::string使えよ・・・
- 831 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:00:56 ]
- 非constのchar*が必要なとき
- 832 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:48:17 ]
- &を見れば定義をみないでもアドレスであることがわかる
ソース中の[をみれば配列にアクセスしている箇所を testをキーワードにして検索したりしないでもすぐ探せる 保守しやすくなるからワザとやってるんじゃないの
- 833 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:52:58 ]
- >>826
Cの配列とアドレッシングとの関連がわかっていることと &test[i]と書くことは全く別問題。
- 834 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:46:33 ]
- &test[ i ] 配列testのi番目の要素のアドレス
test + i ポインタtestからi * nずらしたアドレス って感じだから前者の方がしっくりくるって人が多数派ににるんじゃない?
- 835 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 23:52:10 ]
- &test[i]って書き方はあまりしないけど、&test[0]って書き方なら結構するな
testだけだとパッと見わかりにくいし。
- 836 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 04:23:24 ]
- >>835
char buf[1024]; int size = sizeof(&buf[0]); って書くってこと?
- 837 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 04:35:51 ]
- オッス、オラC言語歴10年、もっとオラがwktkするような宿題を依頼してくれYO!
- 838 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 04:42:23 ]
- >>836
何をしたいのか理解できない
- 839 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:17:42 ]
- 整数を入力してください:25
1234567890123456789012345 こんな感じで1234567890123…を読み込まれた整数の個数だけ繰り返し表示するプログラムを作成する問題なのですが 誰か教えて頂けないでしょうか?
- 840 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:27:22 ]
- [1] 授業単元:
[2] 問題文(含コード&リンク):>>839 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:BCC Developer 1.2.21 [3.3] 言語:C [4] 期限:[無期限] [5] その他の制限:独学ゆえに聞ける人が居なくて困ってます
- 841 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:29:21 ]
- printf("%u", n%10);
あとは頑張れ。
- 842 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:30:16 ]
- >>839
#include <stdio.h> int main() { int n, i; printf( "整数を入力してください:" ); scanf( "%d", &n ); for(i=1; i<=n; i++) putchar( '0'+i%10 ); return 0; }
- 843 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:30:26 ]
- 独力で学習することが独学。
聞ける人がいないのは孤独。
- 844 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:31:01 ]
- >>841
勉強用に捻くれたコードにしてみた。 #include<stdio.h> int main(void){ int n; printf("整数を入力してください:"); for(scanf("%d",&n);n>0;n-=10) printf("%.*s",n,"1234567890"); return 0; }
- 845 名前:844 mailto:sage [2008/03/29(土) 14:31:36 ]
- おっとアンカミス
s/841/840
- 846 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:42:21 ]
- ありがとうございます!
上京したてで友達がいない中、予習してまして…
- 847 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:50:16 ]
- 勉強用に、の意味がわからない
- 848 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 16:14:46 ]
- 勉強用に捻くれたコードを提示すると、捻くれた知識が身に付くだけだぞ。
- 849 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 17:55:02 ]
- と、捻くれた人が言ってます
- 850 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 18:43:08 ]
- >>840 と >>844 は師匠と弟子か?
もしそうならスレ立てしてそっちでやれよ ついでに俺は前置きで > こんなの書いても現段階だと悪影響にしかならん気はするぞ って書いておいたんだがな
- 851 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 18:55:00 ]
- >って書いておいたんだがな
どこに?
- 852 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 19:11:50 ]
- >>850
> >>840 と >>844 は師匠と弟子か? いや、まったく関係なし。 単に暇つぶしで適当かつ、それなりに捻くってコードを書いただけ。 真面目なコードは既に出てたし、こういう捻った書き方もあるよーってね。 #まぁぶっちゃけprintfの書式で遊んでみたかっただけなんだけど。
- 853 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 19:16:56 ]
- 勉強用に、って自分の勉強のことか
- 854 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:07:15 ]
- 変なコードを書くときは、一々捻くれたとか書かないでそのまま書く。
そういうことを書くとちょっと変わった俺臭がきついから。
- 855 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:10:10 ]
- いよいよCにすら関係なくなってきたぞ
- 856 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 23:39:59 ]
- まぁ、ぶっちゃけ、これらを習って最終的に何を作る目的があるのか?
自分も大学生時代にC言語の授業はあったけど、そこで習ったことだけじゃ通用せんが 必要なことは習っていた。その後、自分でライブラリを調べて、日ごろの使用目的に応じて 必要なプログラムを作るようになった。そうなるのが望ましい。
- 857 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:22:05 ]
- まあここに来るのは「プログラムの宿題マンドクサ。誰かにやってもらおう」って人だから、望むべくもないかもね。
- 858 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:36:29 ]
- それくらいの人の方がうれしい
単位がかかってるとか理解できないからもっと簡単にしてくれとかちょっとうざい
- 859 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:43:56 ]
- 何でも良いから宿題かもん
- 860 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:46:37 ]
- ひまなら project Euler でもやってれば
- 861 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:48:37 ]
- おおやってみるdクス
- 862 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 12:55:14 ]
- [1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):() 指定文字列と一致する文字列が規定の文字列に存在するかどうかを2分探索法で探索するプログラム [3] 環境 [3.1] OS: (Windows/Linux/等々) linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)3月31日AM9:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)特になし 上記のプログラムの作り方が分かりません。文字列は2つとも配列に格納してある状態です。よろしくお願いします。
- 863 名前:862 mailto:sage [2008/03/30(日) 12:57:51 ]
- ↑書き忘れました。
規定の文字列というのは2分探索法ですので aaabbcのように辞書順にソートされている1行の文字列です。
- 864 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 13:32:09 ]
- | 1 2 3 4… 9
--------------------- 1| 1 2 3 4… 9 2| 2 4 6 8… 18 3| 3 6 9 12… 27 4| 4 8 12 16… 36 以下省略 と、いった感じの九九の表をforを使って作りたいのですが、どうしたらよいのでしょうか?
- 865 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:02:38 ]
- int main()
{ int i, j; const int max = 9; printf(" |"); for (i = 1; i <= max; i++) { printf(" %3d", i); } printf("\n--+"); for (i = 1; i <= max; i++) { printf("----"); } for (i = 1; i <= max; i++) { printf("\n%2d|", i); for (j = 1; j <= max; j++) { printf(" %3d", i * j); } } return 0; }
- 866 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:06:39 ]
- >>862
mainは適当に書いたから書き直したほうがいいかも kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6186.c
- 867 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:09:28 ]
- >>862
二分探索には標準ライブラリ関数bsearchを使いました。 #include <stdio.h> #include <stdlib.h> #include <string.h> int cmp( const void* key, const void* elm ) { return strcmp( (const char*)key, *(const char**)elm ); } int main(void) { // 規定の文字列。辞書順にソートされていること。 static const char* const table[] = { "abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz", }; const char** hit; char str[101]; printf( "検索文字列:" ); scanf( "%100s", str ); hit = (const char**)bsearch( str, table, sizeof(table)/sizeof(*table), sizeof(*table), cmp ); if( hit ) printf( "'%s'は%d番目に存在します。\n", str, hit-table ); else printf( "'%s'は存在しません。\n", str ); return 0; }
- 868 名前:867 mailto:sage [2008/03/30(日) 15:21:42 ]
- >>863を把握していなかった。修正。
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp( const void* key, const void* base ) { const char* key_str = (const char*)key; return strncmp( key_str, (const char*)base, strlen(key_str) ); } int main(void) { static const char base[] = "aaabbc"; // 規定の文字列 const char* hit; char str[101]; printf( "検索文字列:" ); scanf( "%100s", str ); hit = (const char*)bsearch( str, base, strlen(base), 1, cmp ); if( hit ) printf( "'%s'は%d文字目から存在します。\n", str, hit-base+1 ); else printf( "'%s'は存在しません。\n", str ); return 0; }
|

|