1 名前:デフォルトの名無しさん [2010/01/18(月) 23:25:55 BE:265079647-S★(508111)] あなたが解けない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++の宿題片付けます 133代目 pc12.2ch.net/test/read.cgi/tech/1260532772/
554 名前:デフォルトの名無しさん [2010/02/09(火) 23:19:47 ] [1] 授業単元:プログラミング 1 [2] 問題文(含コード&リンク): /************************* ある二つの文字列str1,str2 の編集距離はつぎの3つの操作を行うことによりstr1 をstr2 に変換するのに要する操作の最低回数である ・ 1文字挿入する ・ 1文字削除する ・ 1文字を他の1文字に置き換える たとえば str1="sport" はstr2="sort" に, 文字 'p' を削除することによりstr2 に変換できるため編集距離は 1 である str_n を文字列str の頭からn 番目までの部分列としm(i,j)をstr i とstr j の編集距離を表すものとする.m(i,j)とm(i+1,j),m(i,j+1),m(i+1,j+1)の間に成り立つ再帰式を記述しなさい この再帰式に基づき効率良く編集距離を計算するプログラムを2次元配列を利用して作成しなさい.ただし,関数m(i,j)はint型の編集距離を返り値とする. ******************************/ [3] 環境 [3.1] OS:windows vista [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C [4] 期限:[2010年2月10日まで] [5] その他の制限:
555 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:20:08 ] [1]C言語とプログラミング [2] キーボードから3つの整数を受け取り大きさの小さい順に出力するプログラムを作りなさい。 但しmain関数内ではint変数一つだけが使えるものとします。またmain関数の再帰呼び出しも 出来ません。(main関数の引数、argc,argvをint変数として使用することも勿論禁止します) main関数のみで構成されるプログラムとして下さい。 入力される数は1から10までの範囲にあることを常にチェックし、それ以外の入力の場合は 再入力を促して下さい。 [3] [3-1]Windows XP HomeEdition [3-2]Visual Studio 2008 [3-3]C言語 [4] 2/11迄 [5] 特に無し
556 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:28:36 ] まぁどれも期日まで時間があるからゆっくりやるべきだ 最近の学生は甘え過ぎ 粘って苦しめてやれというのはウソにせよ 期日ぎりぎりに催促されたら貼ってやる って感じで
557 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:30:40 ] >>549 scanf("%1f",&r); の %1f を %lf に修正。※lは小文字のL main関数が値を返して無いので、最後に return 0; 等を追加。
558 名前:デフォルトの名無しさん [2010/02/09(火) 23:32:55 ] >>556 余計なこと書くなよw 日付変えてくるだろうが
559 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:45:48 ] >>551 問題の題意がイマイチよく分からんので、適当に解釈 #include<stdio.h> main() { int suretu1[]={2,4,6,8,10,12,14,16,18,20}; int suretu2[]={1,2,4,8,16,32,64,128,258,512}; int kotae=0; int count; printf("二つの整列の和によってできる数列は\n"); for (count = 0; count <10; count++ ) { printf("%d ", suretu1[count]+suretu2[count]); kotae += suretu1[count] + suretu2[count]; } printf("\n数列の和は %d\n",kotae); return 0; }
560 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:47:16 ] >>535 #include <stdio.h> #include <string.h> int main(void){ #define CONTENTS "01abc¥n02123¥n03def¥n04456¥n05ghi¥n06789¥n07jkl¥n08000¥n" FILE *f; int i=0; char Fgets[256],Strcat[256],Sprintf[256]; f=fopen("test02.txt","r"); if(f==NULL) return 0; Strcat[0]=0; for(;;){ if(NULL==fgets(Fgets,256,f))break; sprintf(Sprintf,"%02d%s",++i,Fgets); strcat(Strcat,Sprintf); } fclose(f); if(0==strcmp(Strcat,CONTENTS))printf("%s",CONTENTS); return 0; }
561 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:01:18 ] >>552 1.Swapの引数が値渡しなので、Swap関数内で値を変更しても 関数呼び出し元の変数には影響を与えないから。 2.Swap関数内のbuf変数がポインタで定義されていて、その初期化されていないポインタの 示す先を一時保存場所として使用している為、正しく値が交換されない。 3. void Swap(int *p1, int *p2) { int buf; buf = *p1; *p1 = *p2; *p2 = buf; }
562 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:39:59 ] >>561 素早い回答ありがとうございます。助かりました。
563 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:57:05 ] [1] 授業単元: DirectX研究2 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10504.txt [3] 環境 [3.1] OS: (Windows vista) [3.2] コンパイラ名とバージョン:visual stdio 2008 [3.3] 言語: C++ [4] 期限: ([2010年2月10日17:00まで] [5] その他の制限:
564 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 01:26:05 ] >>547 スレ違いだけどFortran77で kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10505.txt
565 名前:564 mailto:sage [2010/02/10(水) 02:17:10 ] スレ違いのまま失礼… 訂正版 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10506.txt
566 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:19:37 ] >>548 思ったより難しかった
567 名前:566 mailto:sage [2010/02/10(水) 02:38:49 ] 入力==>200 1361015212836455566789110512013615317119000000000191 2591420273544546577901041191351521701890000000192172 4813192634435364768910311813415116918800000193173154 7121825334252637588102117133150168187000194174155137 1117243241516274871011161321491671860195175156138121 1623314050617386100115131148166185196176157139122106 2230394960728599114130147165184019717715814012310792 2938485971849811312914616418301981781591411241089379 3747587083971121281451631820199179160142125109948067 4657698296111127144162181020018016114312611095816856 5668819511012614316118020001811621441271119682695746 6780941091251421601791990182163145128112978370584737 7993108124141159178198018316414612911398847159483829 9210712314015817719701841651471301149985726049393022 1061221391571761961851661481311151008673615040312316 1211381561751950186167149132116101877462514132241711 1371551741940001871681501331171028875635242332518127 1541731930000018816915113411810389766453433426191384 1721920000000189170152135119104907765544435272014952 1910000000019017115313612010591786655453628211510631
568 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:42:04 ] [1]数値計算演習 [2] 極座標で表される曲線 r(t)=sin^2(πt) θ(t)=α sin(πt^2) (0<=t<=1)でαを指定した時 の曲線の長さと囲む面積の近似値を求め、π/4<=α<=πまで変化させる時、 面積/曲線の長さが最大になるαを推定する 曲線上の代表点をとり隣接する点の間の距離の和で曲線の長さを近似。 面積は隣接する代表点と原点が作る三角形の面積の和で近似する。 [3] [3-1] Mac-OS-X panther [3-2] XCode [3-3] C/C++どちらでも可能 [4] 2/18迄 [5] 特に無し
569 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:50:49 ] >>555 ビット演算の問題と解釈 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10507.txt
570 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:48:14 ] >>555 タイプミスに苦闘したが5分で打ち込めた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10509.zip
571 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 04:05:07 ] >>568 答えがπになってしまった。間違ってたらごめんね kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10510.txt
572 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 05:31:38 ] >>555 好奇心で書いてみた めちゃ読みづらいけど勘弁 testhp.ddo.jp/prog.c
573 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:39:07 ] >>555 入力数を何でも対応できるように むりやりキャストしてポインター使ってみた codepad.org/xjtWz8N3
574 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:47:33 ] 大きい順と小さい順を勘違いしてた codepad.org/Z5aQHsCW
575 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 08:53:50 ] おまえら必死だな
576 名前:553 mailto:sage [2010/02/10(水) 09:05:02 ] >>575 入力==>200 13610152128364555667891105120136153171190 259142027354454657790104119135152170189 48131926344353647689103118134151169188 7121825334252637588102117133150168187 111724324151627487101116132149167186 1623314050617386100115131148166185 2230394960728599114130147165184 29384859718498113129146164183 374758708397112128145163182 4657698296111127144162181 56688195110126143161180200 678094109125142160179199 7993108124141159178198 92107123140158177197 106122139157176196 121138156175195 137155174194 154173193 172192 191 1)文字列を繋いで、1〜nまでの三角形を作る(上の図参照) 2)それを1文字ずつに分解して、上下反転、左右反転する 3)1と2で出来た物を左右に並べて、隙間がなくなるまで近づける 4)空いた隙間には0を詰める
577 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 09:10:09 ] >>575 問題が魅力的だったからみんなやったんだろうな
578 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 10:38:11 ] >>576 数値自身は左右反転じゃないぞ
579 名前:553 mailto:sage [2010/02/10(水) 12:56:23 ] #define MAXL 100 main(){ int num, i, j, k, len, maxlen; char wrk[4], mat1[MAXL][MAXL*2], mat2[MAXL][MAXL*2], tmp[MAXL]; printf("入力==>"); scanf("%d", &num); for(i=0;i<MAXL;i++) mat1[i][0] = mat2[i][0] = (char)0; i=1, j=0, k=0; while(i<=num){ if(k<0) { k = ++j; if(j >= MAXL) {puts("ERR"); return 1;} // てきとう } sprintf(wrk, "%d", i++); strcat(mat1[k--], wrk); /* LEFT */ strcpy(tmp, mat2[k+1]); /* RIGHT */ sprintf(mat2[k+1], "%d", i-1); strcat(mat2[k+1], tmp); } maxlen = k = 0; for(i=0;i<=j;i++){ len = strlen(mat1[i]) + strlen(mat2[j-i]); if(len > maxlen) maxlen = len, k=i; } for(i=0;i<=j;i++){ len = strlen(mat1[i]) + strlen(mat2[j-i]); for(k=maxlen-len-1;k>=0;k--) strcat(mat1[i], "0"); // めんどう strcat(mat1[i], mat2[j-i]); } for(i=0;i<=j;i++) puts(mat1[i]); }
580 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:00:22 ] >>548 codepad.org/nCjDliKG
581 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:12:52 ] >>548 デバッグ用のprintfがあるので見づらいが、>>580 では 1) 上半分の三角形(>>576 のような)の各行の長さを求める 2) 出力される配列の長さを決める( (i行目の長さ + (h-1-i)行目の長さ)の最大値 ) 3) 出力 という流れ。三角形の(i,j)の位置のにある数字は簡単に計算できるので メモリには各行の長さだけ記憶すれば十分。
582 名前:デフォルトの名無しさん [2010/02/10(水) 13:13:57 ] [1] 授業単元:なし [2] 問題文(含コード&リンク):MSPAINTの色の選択(カラーダイヤログ)を表示して、選択した色(RGB)を文字列として取得する秀丸用のDLLを作成してください [3] 環境 [3.1] OS:Windows XP or Vista [3.2] コンパイラ名とバージョン: なんでも [3.3] 言語: CかC++どちらでも可 [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: とくになし DLLの使用などはこちらを参照してください ttp://homepage3.nifty.com/kons/hidemaru/helpsite/hidemac/html/200_Dll.html
583 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:19:45 ] >>582 それ、宿題じゃねーだろ。
584 名前:570 mailto:sage [2010/02/10(水) 13:32:22 ] >>555 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10512.zip 多くの部分に間違いがあった。 さすがに700行/分の入力ではミスが起こるわなw
585 名前:570 mailto:sage [2010/02/10(水) 13:46:27 ] スマン まだ一カ所ミスが... 入力チェックをミスってる #define INPUT()で でwhileロジックを while ( (m<1)||(m>10) ) に修正して
586 名前:デフォルトの名無しさん [2010/02/10(水) 13:51:16 ] >>336 課題4と課題5どなたかよろしくお願いします。期日すぎても提出できるので、なんとかならないか必死です。
587 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 17:24:00 ] >>586 5番のグラフって何グラフ?
588 名前:デフォルトの名無しさん [2010/02/10(水) 17:40:46 ] 入力データの例 1.2 3.7 2.1 4.2 2.9 1.3 4.0 2.5 x,y軸を-や+で表現して、それぞれ座標の点(4つ)を*でプロットする感じです。
589 名前:555 mailto:sage [2010/02/10(水) 19:03:12 ] >>572 >>573 >>570 どうもありがとうございました。 >>570 さんのコードは非常にわかりやすいです。 3600行を5分で入力とは凄いですね。 タッチタイピング速度はどの位でそれくらいに なるんでしょうか?自分は1分間に賞味150文字が 精一杯です。(IME変換時間を含む) 他の皆様もいろいろと工夫をされておられ特にビット 操作とかポインタ操作とか裏技的な技法は非常に参考 になると思います。
590 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:45:14 ] >>570 ひらいてみた。ちょwwww
591 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:52:14 ] 世間では一昔前はコード1行1万が 相場だった時代もあったね。 >>570 のコードだといくらになるんだかw **確認事項** ここで答えてやっても事後を含め 一切依頼者に報酬を請求出来ない
592 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:54:41 ] >>591 ここで答えるようなのって単体じゃどうせ金にならなくないか?
593 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:55:23 ] >>570 >>584 クソワロタ
594 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:15:31 ] ここで解かれている問題とその回答を 応用してもいいけど事後問題になる可 能性もあるんで(2ちゃんねるから 引用ってw格式ある組織ではそれだけ で処分対象w)
595 名前:570 mailto:sage [2010/02/10(水) 22:38:17 ] >>555 いえいえ。 タッチタイピングの上達のコツは このスレの他の回答者に聞いてくれ 企業秘密なんで。 この業界では毎分400文字〜500文字 (IME入力変換時間を含む)の入力が 生き残りの最低条件なんでw 今回は実にのんびりしたテンポで入力 したよ。 >>590 >>593 何かおもしろいところあるのかい?
596 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:50:17 ] いやここまで冗長なプログラムは初めて見たもんで 一行いくらならこういう方法でガツガツ稼げるなw
597 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:16:03 ] 冗長? 見た目だろ。 ロジックそのものはこれほど直接的なものはない コードは常に短く書けばいいというもんでもないと 目から鱗が落ちたような気分 コードを(最初から)短く書くのが偉いとかそういう 奇妙な信仰はかなり弊害もあるんじゃないかと もっとも一つのint変数しか使えない状況での プログラミングもかなりナンセンスだと思うが
598 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:16:59 ] 回路に例えるとワイヤードロジックな 普通のプログラムがマイクロプログラムに例える事が出来るかも
599 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:21:30 ] >>555 って__asmでスタックとレジスタ使えばint変数一つでも楽勝なんじゃないのw
600 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 02:07:11 ] >>555 逃避したくなったので書いてみた。 codepad.org/HcRNGiZZ
601 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 11:03:25 ] 勉強になるなぁ。hhdかー。
602 名前:デフォルトの名無しさん [2010/02/11(木) 13:05:19 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): #include <stdio.h> int main(void){ int a=0,k; for (k=0;k<100;k++){a++; if(a%5==0&&a%9==0)printf("A\n"); else if(a%5==0)printf("B\n"); else if(a%9==0)printf("C\n"); else printf("%d\n",a); }return 0;} この処理のプログラムをスペース、改行を含み140字以内で書き直したい。 [3] 環境 [3.1] OS:Windows XP Pro [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語:C [4] 期限: [5] その他の制限:特になし よろしくお願いします。
603 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 13:29:10 ] >>602 #include <stdio.h> int main(){ int k; for (k=1;k<=100;k++){ printf(k%5==0&&k%9==0?"A\n":k%5==0?"B\n":k%9==0?"C\n":"%d\n",k); }}
604 名前: ◆/91kCCQXBo mailto:sage [2010/02/11(木) 13:54:38 ] #include <stdio.h> int main(void){ int a; for(a=1;a<=100;a++) printf(a%45?a%5?a%9?"%d\n":"C\n":"B\n":"A\n",a); return 0; }
605 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:04:38 ] >>602 変な問題ですが無理なのでは166byte
606 名前:デフォルトの名無しさん [2010/02/11(木) 14:05:22 ] 602です。 <<603 <<604 の方ありがとうございます。 助かりました。
607 名前:605 mailto:sage [2010/02/11(木) 14:05:28 ] 失礼3項演算子があったのね
608 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:11:20 ] >>555 きっと反則技なんだろうけど。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10517.c
609 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:34:45 ] >>602 code golfするの? a;main(){for(;++a<101;)printf(a%45?a%5?a%9?"%d\n":"C\n":"B\n":"A\n",a);}
610 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:11:13 ] >>555 int a; scanf("%ld %ld %ld%*c", (long *)&a, (long *)&argc, (long *)&argv); じゃだめか Windows XP HomeEditionって64bitないよね
611 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:54:33 ] >>610 たった3行の制約条件を見逃すようじゃ、お前マの適性ない。 転職を勧める。
612 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 01:00:07 ] >>555 もう需要ないかと思うが、面白そうなのでやってみた。 バブルソートのありがたみを出すため、かつ、4bit余ったため、入力する値を4つに勝手に変更。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10519.txt
613 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 01:03:56 ] >>612 1〜10だよ。
614 名前:612 mailto:sage [2010/02/12(金) 01:26:00 ] >>613 1〜10にしてますよー。
615 名前:デフォルトの名無しさん [2010/02/12(金) 01:32:57 ] [1] 授業単元:計算機実習 [2] 問題文(含コード&リンク): hermes.esys.tsukuba.ac.jp/~sano/NumCompEx/project2.pdf [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:VisualStudio2008 [3.3] 言語:C [4] 期限: 3/5 [5] その他の制限:特になし よろしくお願いします。
616 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 02:49:14 ] >>611 その前に就職をしないと
617 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 11:43:57 ] >>615 問題文が理解できません! orz
618 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:44:18 ] このスレの人ってちょっと考えると皆精神病院予備軍だな >>585 とか >>548 を解いて喜ぶ人とかw
619 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:49:19 ] >>618 パズルを解く感覚だよ
620 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:50:35 ] さすが現役精神病の方は言うことが違うね
621 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 17:21:53 ] トルヒーヨのハルディンはここですか?
622 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:30:20 ] >>555 n番煎かしれんがオラも参加! kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10521.c
623 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:31:59 ] >>622 それは突っ込み待ちか?
624 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:33:42 ] >>622 キレイに書くねー。
625 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 20:21:21 ] >>555 n+1番煎じしてみた。 どこにも「同じ数字が複数回入力された場合、まとめてはならない」なんて書いてないよね。 ttp://codepad.org/C0n9Shhq
626 名前:625 mailto:sage [2010/02/12(金) 20:26:28 ] ミスった… × #define PSHORT_A(x) (((uint16_t*)&x)+2) ○ #define PSHORT_A(x) (((uint16_t*)&x)+1) SHORT_Aも同様。
627 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 01:48:01 ] >>555 の問題って、入力がintの範囲内であることは暗黙の了解としても、[0, 10]の範囲にあることの確認は不可能だよね? charの範囲内としたら、(たとえintが規格的に最小な16bitでも)できそうだが。
628 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 02:07:59 ] >>627 お前は何を言っているんだ。
629 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 03:01:56 ] 答えが多すぎて、このパターンだけでいいか。出席を取ります。 @intをポインタとして実際使うメモリはintの配列 Aintを分解して4バイトとして4個の数字を使う B1個の数字しか使わない pc12.2ch.net/test/read.cgi/tech/1255277760/l2
630 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 03:58:19 ] >>628 「半角文字以外に「あ」とか「阿」のような全角文字が入力される場合まで考えると、正しい結果が得られなくなる場合があるのでは?」 って言ってるんだと俺は推測する。 JISとかユニとかの知識が乏しいので、俺には実際どうなのかはわからんが。
631 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 04:33:14 ] 誰も>>585 のコード見て苛つかないの? 同レベルだとみなされかねないし... 常連回答者だったら清書したくならないか?
632 名前:622 mailto:sage [2010/02/13(土) 05:17:54 ] んじゃ、マクロを大文字に修正 #n s/v(\(.\))/V(\1)/g s/swap/SWAP/g s/w\([^h]\)/W\1/g p
633 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:50:31 ] しかしこういうビット演算は今までまったくやったことが無いので、 回答者のみんながホントスゲーんだなと分かる。 >>625 さんのようなバケットソートぽいのを自分でも書こうと思ったが、 まったく書けなかったのが辛いところ。
634 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 12:54:49 ] >>633 まずは愚直なコードからでもいいから一歩を踏み出す事が大事。
635 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 18:42:25 ] >>555 たぶんできてるはず。570のインスパイヤ #include <stdio.h> #include <stdlib.h> int compareInt(int * left, int * right) { return *left - *right; } FILE * OUT; int length = 3, * ans, * vals; void createSwitch(int current, int * vals) { int i; if (current == length) { for (i = 0; i < length; i++) ans[i] = vals[i]; qsort(ans, length, sizeof(int), (int(*)(const void*, const void*)) compareInt); fprintf(OUT, "printf(\""); for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, " "); fprintf(OUT, "%%d"); } fprintf(OUT, "\\n\", "); for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, ", "); fprintf(OUT, "%d", ans[i]); } fprintf(OUT, ");\n"); return; } fprintf(OUT, "val = getchar() - '0';\ngetchar();\nswitch (val) {\n"); for (i = 0; i < 10; i++) { vals[current] = i; fprintf(OUT, "case "); fprintf(OUT, "%d", i); fprintf(OUT, ":\n"); createSwitch(current + 1, vals); fprintf(OUT, "break;\n"); } fprintf(OUT, "default:\nputs(\"input error\");\nreturn 1;\n}\n"); } int main(void) { OUT = fopen("shukudai555.c", "w"); vals = (int *) malloc(sizeof(int) * length); ans = (int *) malloc(sizeof(int) * length); fprintf(OUT, "#include <stdio.h>\nint main(void) {\nint val;\n"); createSwitch(0, vals); fprintf(OUT, "return 0;\n}"); return 0; }
636 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 18:44:07 ] C言語の宿題と聞いて飛んできました。
637 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 20:28:20 ] >>629 @Aは、環境が書いてあるから、intを4bytesとして扱ったりポインタとして扱ったりの環境依存コードがかけるという解釈なんだろうか。
638 名前:568 mailto:sage [2010/02/13(土) 20:45:46 ] >>571 ありがとうございました。自分今のところFORTRANしか 組めないんでFORTRANに移植するのやってみます。
639 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:33:20 ] >>635 すげ〜 といいたいところだが>>584 と同レベルかそれ以下である ということを示していない気がしないでもない
640 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:40:48 ] >>555 >>570 をマクロで見やすくしてみた ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10525.c
641 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:14:51 ] うむ。 マクロを使うとここまで短く出来るんだな。 行数で稼いでいるプログラマは犯罪的だ という教条の根拠か... しかしこれは逆に言えば、マクロを使うことが 禁止された時、それを読む人が地獄の責め苦 を受けることをまた意味しているとも言えるなw
642 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:42:56 ] >>612 を改良した。 ・入力する値を5つに勝手に変更。この方法だと6つ以上は俺には無理だな・・・ ・マクロの使用で見やすくした。 ・範囲外(全角文字も含む)が入力されても、問題なく再入力を促すのを確認。(01や09は範囲外としている) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10526.txt
643 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:50:52 ] >>641 コードのアセンブリ(実行最小単位)に対する圧密 度はC言語の出身地であるシステム記述の分野 では非常に重要な評価ポイントらしいね その世界ではコードは圧密に書けば良いというもので もなく逆に極端に希薄に書けば良いというものでも なく結構奥深いらしい。 それにしても>>584 と>>640 の例は同じ記述が書き 方によって極端に変わる良い例なんだろな
644 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 01:32:40 ] >>640 おみごと
645 名前: ◆/91kCCQXBo mailto:sage [2010/02/14(日) 12:09:11 ] 555 たぶんできてるはず。570のインスパイヤ >>639 >>635 のを借りて見た目I/Oを改良 #include <stdio.h> #include <stdlib.h> FILE *OUT; int length = 3, *ans, *vals; int compareInt(int *left, int *right) { return *left - *right; } void createSwitch(int current, int *vals) { int i; if (current == length) { for (i = 0; i < length; i++) ans[i] = vals[i]; qsort(ans, length, sizeof(int), (int(*)(const void*, const void*)) compareInt); fprintf(OUT, "puts(\""); for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, " "); fprintf(OUT, "%d", ans[i]); } fprintf(OUT, "\");"); return; } fprintf(OUT, "while((val=1, printf(\">\"), scanf(\"%%d%%*c\", &val)) != 1 || val<1 || val>10) {\n" "\t\t\t\t\tprintf(\"ERROR\\n\"); if(val==1) scanf(\"%%*s\");}\n\tswitch (val) {\n"); for (i = 0; i < 10; i++) { vals[current] = i + 1; fprintf(OUT, "\t\tcase "); fprintf(OUT, "%d", i + 1); fprintf(OUT, ": "); createSwitch(current + 1, vals); fprintf(OUT, " break;\n"); } fprintf(OUT, "\t}\n\t\t\t"); } int main(void) { OUT = fopen("shukudai555.c", "w"); vals = (int *) malloc(sizeof(int) * length); ans = (int *) malloc(sizeof(int) * length); fprintf(OUT, "#include <stdio.h>\nint main(void) {\n\tint val;\n\t\t\t\t"); createSwitch(0, vals); fprintf(OUT, "return 0;\n}\n"); /* return 0; */}
646 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 12:45:49 ] あのー。誰も突っ込まないので俺が言う。 >>555 > 但しmain関数内ではint変数一つだけが使えるものとします。 > またmain関数の再帰呼び出しも出来ません。 > (main関数の引数、argc,argvをint変数として使用することも勿論禁止します) > main関数のみで構成されるプログラムとして下さい。 お前一人だけどうあがいても落第だよw
647 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:36:52 ] ソースを生成するんだろうけど、出てくるのはつまらなそうだね。 これなら、秀丸のマクロでいいんじゃね。
648 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:47:49 ] >>555 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10527.c
649 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:57:40 ] なんか、問題自体が不毛だよなぁ。
650 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:00:58 ] とんち合戦の様相を呈してきたな。
651 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:06:28 ] いやむしろIOCCC2ch版というべきか
652 名前:633 mailto:sage [2010/02/14(日) 16:09:58 ] あ、思いついちゃった。 >>648 さんの方法で、データを0-9で保存して1-10と表示させると、 INT_MAX.to_s.sizeの個数の数を扱えそう。 けどソートはどうするんだろうw
653 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:53:38 ] てか依頼者が消えた問題にいつまでも拘泥するのは 宿題スレのマナー違反
654 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:25:56 ] 【質問テンプレ】 [1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク): 生徒数1000人分の学力テスト(五教科)の得点データが有る。ここで、任意の生徒Aと 得点の傾向が一番近い生徒の番号を高速で抽出できるようデータ構造を組みなさい。 (合計点が近い、ではなく、各教科の得点の傾向が大事のようです。) [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC++ [3.3] 言語: どちらでも可 [4] 期限: 無期限 [5] その他の制限: 無し 生徒のデータはstruct seito{int tensuu[5];};こんな感じです。 単に全部検索して得点差を計算したのを提出したらダメと言われました。 こういう問題を解く定石のようなものがあるのでしょうか・・・ 先輩方、よろしくお願いします。
655 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:34:10 ] >>654 簡単に考えれば、 0-20をE 21-40をD 41-60をC 61-80をB 81-100をA みたいに評価をつけて、同じものを抽出すればいい気がする。 もうちょっと細かくランク分けしたほうがいいかな
656 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:33:42 ] >>654 プログラムを組む以前の問題として、どうゆう回答をすれば先生が満足するのか そこがイマイチ不明だ・・・。 傾向が似ているかどうか、というだけなら、各教科の得点を偏差値に変換して、 5次元空間上にプロットした時に、任意の生徒Aとのユークリッド距離が 最も近い生徒を選べばいい気がする・・・。 仮にそれでいいとして、高速抽出するためのデータ構造を組め、ってなると 要は任意の生徒Aに最も近い得点の傾向の生徒Bを予め計算しておいて AとBを対で持たせておけばいいとか、そうゆうことかな?
657 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:44:28 ] モデル化してそれに最適なデータ構造考えろと言ってるんだろ。 モデル化の部分はこれまで授業で触れられていると思う。
658 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 13:54:43 ] >>654 皆全員0点だった場合は誰を選べばいい?
659 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:14:59 ] 誰でもいいんじゃね? みんな一緒だし。
660 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:16:28 ] 656 のやり方で、データを読み込むとき予めソートしておくというのはどう?
661 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:17:26 ] 日本語おかしいな。 データを読み込むときソートした状態にスレばいいんじゃないか?
662 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:19:12 ] >>654 極端な例の場合 ある生徒の得点分布が(50,51,52,53,54) の場合(52,52,52,52,52)よりも(95,96,97,98,99) の人のほうを選出したほうがいいの?
663 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:04:57 ] (0,20,40,60,100)のほうが近いとオモ
664 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:42:32 ] 単に差を出したらダメって言ってるんだから、{52,52,52,52,52}だろうよ
665 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 17:17:46 ] >>654 「傾向が近い」というのは、例えば A (70,63,77) B (70,70,70) C (90,81,99) だと、A≒B じゃなくて A≒C、という解釈 ・・・でいいのか?
666 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 17:32:36 ] 1) 合計の偏差値を取り、Aに近い10%を抽出候補を絞る 2) 五科目点数の総当たりの大小比較を行い、Aと共通なら1異なったら0として その合計が最大のBを選出。 3) Bが複数出たらさてどうするか。
667 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:21:10 ] 取り敢えずまだまだC言語で純正に一気に解決終了! って出来る問題じゃなさそうだな 数学の複素多様体の知識とかデータベースの知識も要りそう な問題で他のシステム(殆どが固有の言語を持つ)との 連携も要るような..
668 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:23:34 ] [4] 期限: 無期限 てのも何かコエーよw
669 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:29:58 ] foreach(生徒 in 生徒たち) { if(指定生徒 == 生徒) continue; match_average = 0; for(科目番号 = 0; 科目番号 < 5; 科目番号++) { diff = 生徒の得点[科目番号] - 指定生徒の得点[科目番号]; match_average += diff * diff; } if(best_match_average > match_average) { best_match_average = match_average 傾向が似ている生徒 = 生徒 } } 考え方は、これでいいのかな? match_average は、ユークリッド距離とか平均二乗偏差を意味する数値だけど、 あえて平方根をとらないことが高速化になってるしw
670 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:34:10 ] >>667 問題によっては複数の支援ツールからなるソリューションパッケージは あっても単独ソルバーアプリにまではとても出来てない問題って沢山あ るからな
671 名前:669 mailto:sage [2010/02/15(月) 18:56:34 ] >>654 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10528.zip うpしてみる
672 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:22:00 ] 俺だったら「極座標」を使い、生徒の得点を中心からの距離と 緯度、経度とかの角度で表す。 「成績球」を半径方向と角度方向の非合同領域に分割し 生徒がどこに所属しているかで似ているかどうかを決める。 データ入力の段階で所属を決めるから、検索はデータの1回の 通読だけで至って単純。 だが領域の取り方が相当恣意的になりデータの分布が事前に 分かっていたら結果のコントロールもかなり出来るんで 敢えて書くべきコードじゃないと思うんでパス (実際の問題では球の中に決して一様に分布しないんで この方法は不適)
673 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:02:38 ] >672 出だしと、まとめが矛盾してるぞ? まあ、つべこべ言わずにコードを書いてみろ。 言ってることが難しすぎて俺にはトンと理解できねえ、 どんなコードになるのか興味あるわ。 書いてください、お願いします。
674 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:12:17 ] >>670 CとかC++とかJavaがソリューション系では好かれない理由は 書くべきプログラムは音楽みたいにmainで始まりトップダウ ンに一気に終了ってパターンであるという固定観念を印象づ けるからじゃね?ソリューション系ではどっちかというと 「絵」とか「図」を書くに近いんで。 多くのC/C++ Javaプログラムの実際はそうではないことは ベテランにはわかってるんだが、教育プロセスにおいて OJTで新人に教える時にコード字面から植え付けられる先入観が 結構邪魔してると認識されることが多いんじゃないかと
675 名前:671 mailto:sage [2010/02/15(月) 20:25:39 ] >651 問題をよく読んでいなかった、データ構造を組まなきゃいけないのね。 0点だわwww
676 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:13:02 ] >>654 類似度は得点を正規化して内積を取ったものとしている kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10529.c
677 名前:676 mailto:sage [2010/02/15(月) 23:03:19 ] >>676 一番近いものだけ分かればいいから qsort じゃなくてもよかった
678 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:25:17 ] 依頼者(今回は質問者かな?)のレベルに追いついたことはわかったw
679 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 01:41:40 ] >>615 問題を解説してくれたまへ ここまでで挫けた ステップ1 double v(double x){ return 4*(pow(x, -12)-pow(x, -6)); } v(x)==εn (但しεn=-0.75) となる二つの x を二分法で求めよ ステップ2 ステップ1 で求めた xin xout を用いて次の積分を計算せよ s(εn)=2*γ*∫sqrt(εn-v(x))dx ステップ3 ステップ2 の結果を用いて n を求めよ ステップ4 ??? ステップ1〜4 を使って γ の値を変化させ…頑張れ
680 名前:デフォルトの名無しさん [2010/02/16(火) 01:59:58 ] ちょっと関係ないかもしれないんだが、今の時期って大学とか休みだから、今ある質問って何の宿題? 長期休暇とかの?それとも高校のか?
681 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 03:16:24 ] 大学院の専門分野での研究課題や入試問題を貼ってて、その後何も反応が 無い依頼は釣りだと思って、スルーしてたんだけど(´・ω・`) チガウノカナ?
682 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 04:12:58 ] >>681 ?
683 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 05:08:42 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10530.zip [3] 環境 [3.1] OS: WindowsVista [3.2] Visual C++ 2008 [3.3] 言語: C++ [4] 期限: 2月17日まで [5] その他の制限: 特になし よろしくお願いします。
684 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 07:39:27 ] >>681 研究室レベルのものはあったが(>>615 ) 入試はみかけない。
685 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:02:15 ] 実際に解く内容は簡単だけど 問題を理解するのが難しいw
686 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:57:46 ] >>684 例えば >>554 とか、プログラム作成を除けば、東京大学大学院の 入試問題↓とほとんど同じだったりするからさ。 www.i.u-tokyo.ac.jp/edu/course/ci/pdf/2005_8_ci_istmajor_all.pdf 普通の回答依頼かとも思ったんだが、真面目に答えて後釣り宣言されるのも アレだから、微妙に情報系を逸脱する宿題はスルーして様子を見てることにしてる
687 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 09:58:04 ] >>684 >>615 は、基礎的な数値計算だろ。学部1年生レベル。
688 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 10:04:02 ] 数式こそ長くて複雑だが、やってることは方程式の解を求めることや数値積分だ。 2分法、セカント法、シンプソン公式を使えばいい。
689 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 14:48:36 ] >>676 これは>654の求めてるものと違うんじゃないかな? 『使いまわしの効かない検索用情報』の収集を フルスキャンで行っているので、力まかせの探索にしかなってないよね。
690 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 16:36:07 ] >>689 一応正規化した段階の情報だけは使いまわせる
691 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 17:40:44 ] >>654 >>676 の改造版 先に全ての生徒間の類似度を計算してみた 予め O(N^2) のコストがかかっているので、検索回数が N に比べて十分に多いときだけ有効 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10531.c
692 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 17:45:15 ] データ数が増えた時のパフォーマンスの低下率 条件付きUPDATE処理に置ける実更新率 こういった観点からデータ構造に見直しが入る やりかたは一つじゃなく、データの分布に 前提条件を置くことによって、相当のパフォーマンス 改善になるが、汎用性と信頼性は犠牲になる
693 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 19:02:05 ] k-dimension tree の出番ですか。
694 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 20:36:27 ] >>693 ある範囲内をすべて列挙するのは簡単そうだけど ある場所の近所だけを調べるってのは簡単なの?
695 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 02:44:01 ] C言語固有の問題では無さそう。 データベース板か数学板で聞いてからの ほうが良さげ。てか依頼者はもう見てないのか?
696 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 03:38:52 ] >>654 傾向の近さの指標として相関係数を使用。gccを使用しているので、VC++では改変が必要かも。 また高速化の余地は十分あると思います。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10532.zip
697 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 05:59:24 ] こういう問題は、「相関度」は外部関数としてブラックボックス として扱うんじゃね?
698 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 06:09:13 ] 相関度に最適なデータ構造の設計も課題なのだが。 そうだ、これもブラックボックスにしよう。
699 名前:デフォルトの名無しさん [2010/02/17(水) 06:34:49 ] [1] 授業単元:C++ [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10533.txt [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (VC8) [3.3] 言語: (C++) [4] 期限: ([2010年2月17日12:00まで] 非常に短い期間を設定していますがあくまで希望納期です
700 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 10:01:02 ] >>699 無料デバッガ募集でつか?(・∀・)ニヤニヤ
701 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 10:04:06 ] 無料デバッグしてやるでつよ(・∀・)ニヤニヤ m_SumList.AddTail((void*)&List1); m_SumList.AddTailに渡すのは(void *)(CStringList **)&List1で本当にいいんでつか?
702 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 11:34:42 ] >699 いくらでも生じる可能性はある それにしてもC++で(void *)とか何考えているんだ
703 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 14:03:40 ] funkてw
704 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 14:52:59 ] >>697 そうだね。だが難しい。相関度に適当な仮定を入れないと 無理だろ >>698 は回答として完全にナンセンスだが、それ以前に 問題も曖昧過ぎかもね。
705 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 21:09:00 ] [1] 授業単元:C [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10535.c [3] 環境 [3.1] OS: 問わず [3.2] Cがコンパイルできれば・・・ [3.3] 言語: C [4] 期限: 今日 [5] その他の制限:左側の要素をしきい値としたクイックソートです.閾値と等しい場合は右側へ お願いします
706 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:00:48 ] >>697 この問題の場合は高速で処理できることも重視されてるようだから、 ブラックボックス化しても処理速度が同等以上ならそのほうが良いけれど、 そうでなければ、どちらがいいかは一概には言えないよ。
707 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 22:32:12 ] >>705 今日迄というのはいくら何でも んG
708 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 16:28:57 ] [1] 授業単元: 期末レポート [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10536.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) FreeBSD バージョンは知りません [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc バージョンは知りません [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語 [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 2月末日まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) C言語どころか、UNIXマシンの操作もおぼつきません。急ぎませんので 片付けて頂ければうれしいです
709 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 17:06:42 ] >>708 int binarycopy(FILE *, FILE *); int main(int argc, char **argv){ FILE *src, *dest; if (argc != 3) return -1; src = fopen(argv[1], "rb"); if(src == NULL) { fprintf(stderr, "%s が開けない\n", argv[1]); return -1; } dest = fopen(argv[2], "wb"); if (dest == NULL) { fprintf(stderr, "%s が作成できない\n", argv[2]); return -1; } if(!binarycopy(src, dest)) { remove(argv[2]); fprintf(stderr, "複製に失敗\n"); return -1; } fclose(src);fclose(dest); return 0; }
710 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 17:07:25 ] >>708 続き。 int binarycopy(FILE *s, FILE *d) { #define BUFFSIZE 256 char buff[BUFFSIZE], size = sizeof (char); size_t n = 0, total = 0, buffsize = BUFFSIZE; #undef BUFFSIZE for (;;) { n = fread(buff, size, buffsize, s); n = fwrite(buff, size, n, d); total += n; // エラーが生じた場合や、end-of-file(ファイルの最後)に達した場合、 // 返り値は指定した個数よりも小さい値(またはゼロ)となる。 if (n == 0 || n < buffsize) break; } return total; }
711 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:35:42 ] >>699 いf(pぃst2){ POSITION pos2 = plist1->GetHeadPositon(); CString str = plist1->GetNext(pos2); }
712 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:37:02 ] >>711 pぃst2じゃねーや1だ
713 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:26:05 ] HPはどのページも3クリック以内でたどり着けるのが良いとされています。 さて問題です。どのページからも、すべてのページへこの条件を満たすようにするには 各ページにリンクはいくつ必要でしょうか。 link(n)をページnのリンク数としたとき min { link(n) } を決定するという問題です。
714 名前:713 mailto:sage [2010/02/19(金) 15:27:42 ] ページ数は、1000から1万の任意の値が与えられる物とします。
715 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:38:17 ] min(Σlink(n))じゃなくて? インデックスページを作り、 他のページはインデックスページへ1つのリンクを持てば どのページへも2クリックで行けるから min(link(n))はインデック以外のページすべて=1
716 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:43:44 ] ∩★テンプレに即していないんで★雑談扱いとさせて頂きます★∩
717 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:53:55 ] min(max(link(n)))
718 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:59:21 ] ページのリンクの最大数を、最も小さくするようにするってことでした。
719 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:03:43 ] 面白いけど奥深すぎ
720 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 17:16:00 ] >>654 クラスタリング k-meansでググれ
721 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:10:58 ] >>713 ページ数Nに対して 2√N くらいじゃないかね 戦略: ・全部のページを同じ大きさのm個のグループに分ける(各グループには N/m ページある) ・各グループにインデックスページを作り、 グループ内の他の全てのページと相互リンクする ・各グループのインデックスページを全て相互リンクする ・任意の2ページ間は多くても 自グループのインデックス→目標グループのインデックス→目標ページ の3クリックで移動できる 一番リンクの数が多いのは各グループのインデックスページで、 max(link(n)) = (インデックス間の全結合) + (グループ内のリンク) ≒ m + N/m これが最小になるのは m=√N のときで min(max(link(n))) ≒ 2√N
722 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:29:14 ] >>721 を書いてから半分にできることに気づいた 戦略: ・全部のページを同じ大きさのm個のグループに分ける ・グループ内のページは全て相互リンクする ・グループ内の(m-1)個のページにそれぞれ担当のグループを割り当て、 グループ間の担当のページ同士を相互リンクする ・任意の2ページ間は多くても 自グループの担当ページ→目標グループの担当ページ→目標ページ の3クリックで移動できる このとき、リンクの数が一番多いのはグループ間を繋ぐ担当のページで、 max(link(n)) = (グループ内の全結合) + (担当グループへのリンク) = N/m-1 + 1 最も効率が良くなるのは、グループ内の全てのページが他のグループの担当ページになるとき、 つまり N/m = m のときで、そのときm = √Nであって、 min(max(link(n))) = √N。
723 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:41:52 ] 独り言を書くのは俺も含めて勝手だが... >一番リンクの数が多いのは... と勝手に決めて、それが最小になるのは... とする論法は頂けませんなw 希望的見積もりというのなら分かるが... このスレで常連回答者やってる人どんな質問にも 答えがあって、答えなければいけないんだと 思い込む空気が醸成されておりそれに毒されてしまっ てるかもしれないことに常に気をつけなければならないね。 プログラミングの場合は、数学の問題と違って 必ずしも正解があるとは限らない対象も扱わざるを得ない 場合が多くて大変だからこそ...
724 名前:722 mailto:sage [2010/02/20(土) 01:51:03 ] >>723 >>一番リンクの数が多いのは... >と勝手に決めて、それが最小になるのは... >とする論法は頂けませんなw ごめんなさいごめんなさい。>>721 の勢いで適当なこと書きました。 ちゃんと計算したら max(link(n)) ≒ N/m + m/(N/m) で、 min(max(link(n)) ≒ 1.89*(N)^(1/3) くらいでしたorz というかC/C++の宿題じゃないな、その点についても謝る
725 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:56:24 ] 論点がずれてた件… 「この戦略のもと」ってちゃんと書かないといけないな 採った戦略が厳密に最適かは分からんが、 それでも準最適な戦略を考え出すのがプログラムに必要な能力
726 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 02:03:49 ] >>713 最適解かどうかは不明だけど、実現可能な解 #include<stdio.h> #include<stdlib.h> int max_min(long n) { long i, j; if(n==1) return 0; if(n<=4) return 1; for(i=0;;i++) { for(j=1;j<=i;j++) { if(j*(i-j+1)*(i+1)+j>=n) return i; } } return -1; } int main(int argc, char *argv[]) { int n=1000; if(argc==2) n=atoi(argv[1]); printf("%d\n", max_min(n)); return 0; }
727 名前:726 mailto:sage [2010/02/20(土) 02:32:46 ] >>726 間違ってたorz
728 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 02:53:03 ] 頭の中のハイパーリンクも含めたらそうなるなw
729 名前:726 mailto:sage [2010/02/20(土) 03:03:20 ] >>713 これで実現可能になった…はず #include<stdio.h> #include<stdlib.h> int max_min(long n){ long i, j; if(n==1) return 0; if(n<=4) return 1; if(n<=7) return 2; for(i=2;;i++){ for(j=2;j<=i;j++){ if(j*(i-j+1)*(i-j+1)+j>=n){ return i; } } } return -1; } int main(int argc, char *argv[]){ int n=1000; if(argc==2) n=atoi(argv[1]); printf("%d\n", max_min(n)); return 0; }
730 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 03:23:33 ] 正解と汚解ってかW >>555 に対する>>570 とかの解答とかな
731 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 04:06:13 ] >>615 codepad.org/R1c1NLXp γ=100を計算するところまで。解析解との比較は面倒だからやってない。 x_in、x_outが単調に増減してるからそんなに間違ってないはず。 γ変えて議論するのは自分でやってくれ。γは128行目
732 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 04:54:56 ] スレ違いだけど解きたくなっちゃうのは仕方ないよな
733 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 05:01:57 ] 解くべきはまずはその問題の出所。というよりも問題意識に共感できること。 そして実は対象に問題はなく真の問題は解きたいと思う汝自身に発している かも知れないということも考えると間違いは少ない。 以上チラ裏
734 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 06:13:09 ] >>713 pc12.2ch.net/test/read.cgi/tech/1261443439/740
735 名前: ◆/91kCCQXBo mailto:sage [2010/02/20(土) 10:52:17 ] pc12.2ch.net/test/read.cgi/tech/1261443439/739 #include<stdio.h> int main(void){ int n,m,i,j; float ans; /* 解答 */ printf("ページ数:"); scanf("%d%*c", &n); m=n; ans = (n+1)/3.0; if((n=ans) != n) n++; printf("\n%d[page] %d[link/page]", m, n); /* 結果 */ for(i=1;i<=m;i++){ printf("\n%d:",i); for(j=0;j<n;j++){ printf("%d ", (i + j*(n-1))%m+1 ); } } puts(""); return 0; }
736 名前: ◆/91kCCQXBo mailto:sage [2010/02/20(土) 11:05:35 ] なんか、今見たら違ってる。
737 名前: ◆/91kCCQXBo mailto:sage [2010/02/20(土) 13:18:05 ] もっと減らせそう #include<stdio.h> int main(void){ int n,m,i,j; float ans; /* 解答 */ printf("ページ数:"); scanf("%d%*c", &n); m=n; ans = (n+1)/3.0; if((n=ans) != n) n++; printf("\n%d[page] %d[link/page]", m, n); /* 結果 */ for(i=1;i<=m;i++){ printf("\n%d:",i); for(j=0;j<n;j++){ printf("%d ", (i + j*3)%m+1 ); } } puts(""); return 0; }
738 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 14:17:55 ] >>737 >>722 のアルゴリズムの場合 ページ数 20 のときリンクの最大数は 4 これより減ることはあっても増えるのは無しだろう 1 : 2 3 4 5 2 : 1 6 7 8 3 : 1 2 9 10 4 : 1 2 11 12 5 : 1 2 13 14 6 : 1 2 15 16 7 : 1 2 17 18 8 : 1 2 19 20 9 : 1 2 10 : 1 2 11 : 1 2 12 : 1 2 13 : 1 2 14 : 1 2 15 : 1 2 16 : 1 2 17 : 1 2 18 : 1 2 19 : 1 2 20 : 1 2
739 名前:738 mailto:sage [2010/02/20(土) 14:50:48 ] >>722 のアルゴリズムじゃねーw
740 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 21:27:37 ] 実際にリンク組んで確かめるプログラムはないんですか。
741 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:30:28 ] ていうか、あってるかどうか確認するプログラムって、オーダはどうなる? ページ数をN、最大クリック数をCとしたら、NCでできるのか?
742 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:10:35 ] U個のユニットに分け、ユニットをそれぞれG個のグループに分ける。 各々のグループにはn枚目のページがあるとする。 また、n >= Uという条件をつける。 このとき、総ページ数N = U*G*n まず、グループ内のn枚のページで、相互リンクを貼る。 相互リンクの数は (n-1)個 次に、グループ内のm枚目のページにm番目のユニットの各々のグループ内のページ(どれでもいい)各1枚へのリンクを貼る。 グループ外リンクの数は、G個 こうすると、(ユニット, グループ, ページ) = (u1, g1, p1)から(u2, g2, p2)へ行くのに、最大でも (u1, g1, p1) -> (u1, g1, u2) -> (u2, g2, ??) -> (u2, g2, p2)の3クリックで行ける。 また、このとき合計リンク数はG + (n-1)個 G + (n-1)が最小となり、N = U*G*n, n >= Uを満たす数字を考えると ・まず、Uを増やして数を稼ぎたいので、U=n ・よって、N=G*n^2を満たし、G+(n-1)が最小となるn, Gを求める ・計算の結果、それはn^3=2N, G=n/2のとき
743 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:19:18 ] 例えば、64ページあるとき、 Unit 0{ Group 0{ Page 0 = [(0,0,1), (0,0,2),(0,0,3),(0,1,0)], Page 1 = [(0,0,1), (0,0,2),(0,0,3),(1,0,0),(1,1,0)], ...} Group 1{ Page 0 = [(0,1,1), (0,1,2),(0,1,3),(0,0,0)], Page 1 = [(0,1,1), (0,1,2),(0,1,3),(1,0,0),(1,1,0)], ...} } Unit 1{ Group 0{ Page 0 = [(1,0,1), (1,0,2),(1,0,3),(0,0,0),(0,1,0)], Page 1 = [(1,0,1), (1,0,2),(1,0,3),(1,1,0)], ...} Group 1{ Page 0 = [(1,1,1), (1,1,2),(1,1,3),(0,0,0),(0,1,0)], Page 1 = [(1,1,1), (1,1,2),(1,1,3),(1,0,0)], ...} } ... になって、グループ数=2, ユニット数=ページ数=4で、最大リンク数は5
744 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:57:26 ] ヒューリスティックアプローチを探したいものだが C/C++言語ではやめたほうがいいかも VM上で実行できる処理系でないと カーネルコードが書ける処理系ではお勧め出来ない
745 名前:738 mailto:sage [2010/02/21(日) 02:02:28 ] >>738 のアルゴリズムで解いた結果は 総ページ数 1000 のとき、最大リンク数 18 総ページ数 10000 のとき、最大リンク数 40 合ってるかどうか未確認 詳細内容 50kB ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10538.lzh
746 名前:デフォルトの名無しさん [2010/02/21(日) 08:46:43 ] [1] 授業単元: UNIX C Programming [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10541.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) Mac OSX 10.5.8 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc 4.0.1 [3.3] 言語: どちらでも可 [4] 期限: 2010年2月24日夜7時まで [5] その他の制限: 可能であれば強引な方法でも構いません。 上記リンクはCで書いてありますが、C++でも構いません。 何卒よろしくお願いします。
747 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 15:06:11 ] >>713 です。みなさんサンクスです。動かして確認してみます。
748 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:08:02 ] >>745 1000個のほうはあってたよ。 10000個のほうは、おれの作った糞ツールでは、検証不能w よかったらソースうpしてくれないか? ちなみに>747とは別人です。
749 名前:738 mailto:sage [2010/02/22(月) 00:03:29 ] >>713 >>748 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10543.c 6割近く何も指してないのが気に入らない
750 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 09:03:49 ] >749 ありがと。 ここにあがってる回答はどれも不正解だった。 自分も正解はわからないけど、手計算で次の最適解を発見した。 ページ数 8 の答えは 2 ページ数 12 の答えは 3 ページ数 8 の最適解の例 1: 2 3 2: 4 5 3: 6 7 4: 8 1 5: 2 3 6: 4 5 7: 6 7 8: 8 1
751 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:46:32 ] floor(n^(1/3))でいけそうなものだけどだめなのかね
752 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:48:17 ] ceilだねごめん。
753 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 12:59:14 ] リンク3、リンク4で賄える最大ページ数を求める方が良いと思う。 それが決まればその表引きで求まる。
754 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 15:17:41 ] どの2点とっても、3つ以内の矢印でつながってるってことだろ。 総当たりやると矢印生成でかなり時間かかるな。 それを全ての2点でつながるかチェック。このチェックは時間かからないが、塵も積もれば山となる。
755 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 15:24:23 ] 同じ場所へ複数リンクが付くと無駄なので、最大リンク3なら 初めの方はリンクがかぶらないように配置していいはずだな。 リンク3なら、総数が3*3*3=27より上には出来ないから、この範囲で増減しながらしらみつぶしでやるか。 1: 2 3 4 2: 5 6 7 3: 8 9 10 4: 11 12 13
756 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 15:39:56 ] このスレでちょくちょく出る宿題のテーマの道具 使えば最適解とは違うかも知れないがそれに肉薄 するのは簡単に出せるだろ? 但しヒューリスティックス系はC/C++では 書かないほうがいい。個人でやるのは止められないが ネット公開するのはやめたほうがいい。今時。
757 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 15:42:47 ] 1000は18で出来るらしいが17以下の解見つけた人
758 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:25:32 ] >>746 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10545.txt 汚くなってしまいましたが、どうぞ。
759 名前:548 mailto:sage [2010/02/22(月) 16:53:39 ] >>579 >>580 無事提出できました。 ありがとうございました。最初は どちらのほうを参考にさせてもらえ ばよいのか悩みましたが、結局 友達と相談しながらやったらみなさんと 同じ結果が出るようになったので そちらをだしました。
760 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:13:50 ] >>757 1: 1 2 3 4 5 6 7 8 9 10 2: 11 12 13 14 15 16 17 18 19 20 以下略 金太郎飴方式恐るべし
761 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:36:20 ] 金太郎飴方式 yowa
762 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:38:26 ] >>760 どこが金太郎飴かわからんけど、その調子でもう少し書いてみようか
763 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:46:01 ] 金太郎飴方式 towa?
764 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:49:27 ] ろだで10539で質問した者ですが、また質問です。入門書などによくある*印でピラミッドを造るプログラムを作ったのですが、10行目と11行目の部分は削除しても同じように動作しました。 なぜでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10546.c
765 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:54:01 ] >>764 バイナリが更新されていないからじゃないかな
766 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:57:07 ] >>765 どういう意味なのでしょうか?
767 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:57:42 ] >>762 問題によっては最適解近辺は金太郎飴の断面みたい な状況であることを原理とした探索法のことではな いかと想像
768 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:03:46 ] >>766 修正前の実行ファイルを動かしたまま ソース修正 → コンパイル → リンク (で、実行ファイルが上書きできなくて エラー) → 再実行 →あれ? 古いままの挙動じゃん → 実行ファイルのタイムスタンプ確認 アチャー
769 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:06:04 ] >>768 試してみましたが、それはないと思います。実際自分が作ったものは10.11行があっても動きますが、実際本に書いてあるのは それの10,11行目がないものが書いてありました。
770 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:08:33 ] >>768 申し訳ありません。もう一度試してみたらうまくいきました。どうやらその行をctrl+xで切り取ったあと再び貼り付けてしまったようでした。 本当に申し訳ありませんでした。
771 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:09:20 ] 俺試してみたけど削除したらピラミッドなんて出てこんよ
772 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:12:09 ] >>764 こちらで試したところでは、10行目、11行目を省くとピラミッドにはなりませんでした。 段数を入力してください。(0から40まで) 5 * * * * *
773 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:17:30 ] >>770 >うまくいきましたというのは768さんのいう通りということです。 すいません。
774 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:22:32 ] つまり?
775 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:24:16 ] >>774 ?
776 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:24:51 ] >763 どこを切り取ってみても、数字がおなじ規則で並んでいる。 >760 の 1 の例だと 1 クリック目 9 種類のページにアクセス可能 2 クリック目 9 * 10 種類のページにアクセス可能 3 クリック目 9 * 10 * 10 種類のページにアクセス可能 もともといたページを含めて、ちょうど千種類のページにアクセスできる。 これは、どこを切り取ってみても、同じように数字が並んでいるので、 1 以外の数字についてもあてはまる。 規則的にならんでいるので、検証するにしても、 1 だけ検証できれば全部OKみたいな感じ。 1クリック目の選択肢が 9 種類しかなくて、n^3 の爆発力をかなり損しているけど ぎりぎり届いてた。n^3 の爆発力が重要な問題だった。
777 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:25:41 ] 数学的なことはわからんけど、こんな法則をみつけた。 a = pow(N, 1/3) /* ページ数の3乗根をとる */ min = floor(a) /* 天井とそこをとる */ max = ceil(a) min = pow(min, 3) /* 3乗して元に戻す */ max = pow(max, 3) if(min < N && N <= max) { /* レンジに収まってれば */ printf("答えは %f だよ", ceil(a)) } else { printf("答えは %f だよ", floor(a)) }
778 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:37:05 ] >>750 のように一つずつずらしていけば、3クリック以内で到達できるようにできるってことか。
779 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:44:05 ] 1000なら10個でいいってこと? 1000から999へいけるか。 1000 -> 1(2-11) -> 11(102-110) -> 110で最大到達地点は110では。
780 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:46:45 ] 間違えた。一手目が1だけではない。再考する。
781 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:56:59 ] 1から初めて全部いけそうだな。他の数字も純粋しているだけだから同様ってことか。 1 2- 2 12- 3 22- ・・・・ 10 92- 11 102- 12 112- ・・・・ 100 992- ・・・・ 998 972- 999 982- 1000 992-
782 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:59:44 ] >>776 9通りがよくわからなかったが今わかった。1は自分自身に向かわせてるからね。 2から初めて他所で自分自身に向かわなければこっちの方が効率良いはず。
783 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:02:36 ] 一番重要なことは、金太郎飴方式だと、 リンク先のユニーク性を簡単に確保できることだね。 N^3 + N^2 + N + 1 >= N この付近が最適解だってのはわかってたけど、 ユニーク性の確保が悩みの種だったし。 1クリック目のとび先と、2クリック目の飛び先がかぶってたら 大きなロスになるし。
784 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:52:22 ] max(links(n)) * Σlinks(n) これで評価してみれば?
785 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:16:13 ] N=8の時の金太郎飴状態なリンク例 1:4 7 2:1 7 3:1 6 4:7 5:1 6 6:1 8 7:5 8 8:2 3