• 締切済み

次の問題がよくわかりません。

(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; } 以上です。 解答と詳しい解説をよろしくお願いします。

みんなの回答

回答No.3

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言語の問題と仮定した場合、 「変数の型宣言」が存在しない時点て問題として成立していない 箇所が多いんだけど。

回答No.2

>次の問題がよくわかりません。 それで、それぞれについてわからない部分は? (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; } ------------

kurumito3
質問者

お礼

おそくなりすいません。 (1)はわかりました!わかりやすい説明ありがとうございます。 (2)~(4)でわかるのがありましたら、説明と解答をよろしくおねがいします。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 …学校の課題でしょうか? まずは、ご自分で「自助努力」されるのが尤も重要な事なのではないかと思うのですが、如何でしょうか?

関連するQ&A