- 締切済み
次の問題がよくわかりません。
(1)下記のステートメントを実行したときのjの値を求めなさい。 m=1;n=0;j=5; if(m>0 && n<0) j=j*j+1; else j=j*5; (2)下記のプログラムが終了した時点でのjの値を示しなさい。 リストの初期値 L[1]L[2]L[3]L[4]L[5]L[6]L[7]L[8] 30 10 24 23 28 14 30 9 i=1; j=8; sv=22; while(i<=j) { while(L[i]<sv) i=i+1; while(L[j]>sv) j=j-1 if(i<=j) {temp=L[1]; L[i]=L[j]; L[j]=temp; i=i+1; j=j-1;} } (3)二分検索において、整列されたデータの個数が8倍になると、最大検索回数はどうなるか。 (4)下記のプログラムにおいて、最悪の事例の場合に実行される命令文の数をリスト(L)の要素の数(n)で示しなさい。 search(L[],n) { k=1; safe=100 while(k<=n) { if(safe<L[k]) safe=L[k]; k=k+1; } return safe; } 以上です。 解答と詳しい解説をよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- SilverThaw
- ベストアンサー率32% (260/806)
No.2です。 >(2)~(4)でわかるのがありましたら、説明と解答をよろしくおねがいします。 主義として「答え」まで回答するのは、質問者自身の為にならないとのスタンスなので、あくまでヒントだけ。 (2)これもソースの整理 ------------- L[9] = { 0, 30, 10, 24, 23, 28, 14, 30, 9 }; i = 1; // たぶん、開始位置 j = 8; // たぶん、終了位置 sv = 22; // 何かのリミッタ? while( i <= j ) // 開始から終了までループ { while( L[i] < sv ) // L[i]がSV(22)より小さい間ループ { i = i + 1; } while( L[j] > sv ) // L[j]がSV(22)より大きい間ループ { j = j - 1; } if( i <= j ) { // L[i]とL[j]の内容入れ替え temp = L[1]; // <--L[i]じゃないと処理成立しないけど? L[i] = L[j]; L[j] = temp; i = i + 1; j = j - 1; } } ------------- (3)「二分検索」を学習し理解すること (4)これもソース整理 ------------- search( L[], n ) { k = 1; safe = 100; while( k <= n ) // kがn以下なら { if( safe < L[k] ) // safeがL[k]より小さければ { safe = L[k]; } k = k + 1; } return safe; } ------------- (3)を除いて、これがC言語の問題と仮定した場合、 「変数の型宣言」が存在しない時点て問題として成立していない 箇所が多いんだけど。
- SilverThaw
- ベストアンサー率32% (260/806)
>次の問題がよくわかりません。 それで、それぞれについてわからない部分は? (3)(4)はともかく、(1)がわからないとなると、その後の回答も難しいんだけど? とりあえず、(1)をわかりやすく整理。 ------------ m = 1; n = 0; j = 5; if( (m > 0) && (n < 0) ) //mが0より大きく、nが0より小さいときはこっち { j = j * j + 1; } else //ifの条件が成立しなければこっち { j = j * 5; } ------------
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 …学校の課題でしょうか? まずは、ご自分で「自助努力」されるのが尤も重要な事なのではないかと思うのですが、如何でしょうか?
お礼
おそくなりすいません。 (1)はわかりました!わかりやすい説明ありがとうございます。 (2)~(4)でわかるのがありましたら、説明と解答をよろしくおねがいします。