多分、この問題突き詰めていけば数式一本で計算終了できそうな悪寒。
free論争再発の兆し
個数が限定でない和が10倍は解ける? 合計が K となるサイコロのパターンの個数を表示せよ。ただし K ≦ 3000 とする
最低3000個、最高500個必要だが 今思ったがコンビネションのC(m,n)と関係ないか?
C(3000,0) C(2999,1) C(2998,2) の気がしている
>>956 最初コンビネで解こうと思ったら、一つの最大値6ってのをどうすればいいか分からなかったorz
俺の貧弱数学脳によればこれは組み合わせでは解けない、と思う(自信ないが)
959 :
958 :2007/12/08(土) 21:53:13
もっと簡単なしゅくだいかもーん
961 :
デフォルトの名無しさん :2007/12/08(土) 21:57:08
早い奴できたよー #include<stdio.h> #define MAX_N_DICE (50) #define MAX_N_SUM (300) float result[MAX_N_DICE][MAX_N_SUM]; void prepare(int n_dice) { int i, k, sum; for (k = 0; k < MAX_N_SUM; k++) { result[n_dice][k] = 0.0; for (i = 1; i <= 6; i++) { sum = k+1-i; if (sum >= (n_dice-1) && sum <= 6*(n_dice-1) && sum < MAX_N_SUM) { result[n_dice-1][k] += result[n_dice-2][sum-1]; } } } }
962 :
デフォルトの名無しさん :2007/12/08(土) 21:57:43
>>961 つづき
int main()
{
int n, k;
for (k = 0; k < MAX_N_SUM; k++) { result[0][k] = k < 6 ? 1.0f : 0.0f; }
for (n = 1; n <= MAX_N_DICE; n++) { prepare(n); }
printf("The number of dices:");scanf("%d",&n);
printf("The sum of numbers:");scanf("%d",&k);
printf("The number of the pattern: %f", result[n-1][k-1]);
return 0;
}
963 :
デフォルトの名無しさん :2007/12/08(土) 21:59:27
いつものくせでfloatにしちまったが気にスンナ
666666 1566666 2466666 3366666 2556666 3456666 という列が生成できればいいと思う
966 :
デフォルトの名無しさん :2007/12/08(土) 22:08:43
>>961 ん?double型の有効桁数超えてない?気のせい?
969 :
デフォルトの名無しさん :2007/12/08(土) 23:53:33
>>968 >>961 うん、有効桁数全然足りてないね
そのプログラムだと n = 50, k = 170 のとき
24456539641287986023030807574303735808
と表示されるけど、正解は
24456535588845712147456213502130798435
のはず。
long long で駄目な時点でdoubleでも無理だわな
ここはアルゴリズムの高速化よりも処理効率の向上を目指しても面白いと思うんだ マルチプロセッサ対応とかSSEとか機械語とか
>>970 だが、アルゴルだけは正しそうなんで、あとは多倍長ライブラリに移植すれば、O(n*k)で計算可能?
多倍長加算に多分O(n)要るから、O(n*n*k)だろ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):1. 以下のような、関数形式マクロで値が負、零、正で、-1、0、1を返すsign()を定義するように、()の中に文字を入れなさい。 # define sign(x)( ) [3] 環境 [3.1] OS:Windows [3.3] 言語: C [4] 期限:2007年12月10日15:00まで [5] その他の制限:特になし
# define sign(x) (x<0?-1:x!=0) たぶんこんな感じだと思うけど確認してない
>>975 #define sign(x) ((0<x)-(x<0))
>>975 #define sign(x) ((x)==0 ? 0 : ((x)<0 ? -1 : 1))
http://qb5.2ch.net/test/read.cgi/operate/1196529079/749 749 名前:マァヴ ◆jxAYUMI09s [] 投稿日:2007/12/08(土) 17:56:40 ID:mzzKkj6v0 ?PLT(25001)
2007年12月11日の 午前11時00分より 正午まで
サーバセンターでスイッチのメンテナンスを行うんだけど
そのスイッチにぶら下がってるサーバはほとんど2chのサーバだったりする(^_^;)
たぶん、大量に繋がらないサーバが出るはず(^_^;)
752 名前:マァヴ ◆jxAYUMI09s [] 投稿日:2007/12/08(土) 18:05:32 ID:mzzKkj6v0 ?PLT(25001)
>749
日本時間です(^_^;)
[1] 授業単元:C言語基礎 [2] 問題文(含コード&リンク): 名前、身長、体重、視力(視力構造体)これらのデータをメンバとする構造体を定義し、入力と表示を行うプログラムを作成してください。 入力件数は最大5件で、名前は19文字までの入力とし、範囲外だったならばエラーメッセージを表示し再入力させてください。 名前に”END”が入力された時は入力終了とします。 表示は身長で昇順にソートして出力してください。 また身長、体重は、小数点以下第一位までの表示とします。視力は、小数点以下第三位までの表示とします。 出力の幅は、名前が19文字分、そのほかは5文字分で指定してください。 視力は右、左をメンバとする構造体で扱ってください。 1件分の入力はinput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってください。 名前入力の最初に”END”が入力された場合は、その旨のメッセージを出力してください。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition [3.3] 言語:C [4] 期限:特になし [5] その他の制限:よろしくお願いします。
あ、くそっ、メッセージ表示忘れた。 42行目をbreak;からputs("ENDが入力されたので、入力処理を終了します。") break;に書き直しだ。
小数点第三位まである視力ってw まぁ、課題だから色々あるんだろうけど…
視力0.005ですが何か?
およそ0でいいだろそんなの。 むしろ小数点以下要らない。
>>983 ありがとうございます
ただENDを入力しても入力処理が終了しないような気がするんですが・・・
あっちゃんと入力終了しました ありがとうございます
992 :
991 :2007/12/09(日) 21:06:23
>>992 inputdataの戻り値をmainでチェックする
994 :
991 :2007/12/09(日) 21:27:52
>>993 あっそういうことですか!
ありがとうございました
せっきす
え? つよきす?
1000
みにきす
1000なら今年受験に合格して、 来年は大学でハーレム形成する
1000なら今年受験合格して、 来年は大学でハーレム形成する
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。