• 締切済み

大至急お願いします!!!!!!!

diszoの回答

  • diszo
  • ベストアンサー率78% (32/41)
回答No.1

答えは3です。 方法は、自前でプログラムを作成して、動かすか 紙に順序立てて値を書き出してみればいいかと思います。 #プログラムはソートですね。

uny_mpy
質問者

補足

値は書き出してみたのですが、どうしてjが3になるのかさっぱりわかりません>< 教えてください!!お願いします!!

関連するQ&A

  • 大至急お願いします

    下記のプログラムが終了した時点でのj の値を示しなさい。 リストの初期値 L[1] 35 L[2] 10 L[3] 24 L[4] 22 L[5] 28 L[6] 14 L[7] 30 L[8] 8 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[ i ] ; L[ i ] = L[ j ] ; L[ j ] = temp; i = i +1; j = j - 1; } } jは28になるのが正しいですか? 初期値は横一列に並んでましたが、横にしたら文章がずれてしまうので、縦一列にしました。

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

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

  • C言語でのソートについて質問

    shianData配列の一列目が性別、二列目が年齢、三列目が部署です。 これを部署、年齢の優先順位で並べ替えたい。部署は昇順、年齢は降順です。 しかし以下のプログラムですとそれぞれの列が独立に並び替えられてしまいます。 このプログラムを直していただけないでしょうか。できれば解説もお願いします。 #include<stdio.h> void main(void){ int i,j,Temp; int shainData[][3]={{0,20,1},{1,34,1},{0,55,1},{1,43,3},{1,21,3},{0,43,3},{0,21,2},{1,67,3},{0,83,3},{0,24,2},{1,56,3},{0,78,3},{0,44,1},{1,33,1},{0,22,2},{1,66,3},{0,55,1},{1,31,1},{0,41,3},{0,43,3}};     for(j=19;j>0;j--){ for(i=0;i<j;i++){ if(shainData[i][2]<shainData[i+1][2]){ Temp=shainData[i][2]; shainData[i][2]=shainData[i+1][2]; shainData[i+1][2]=Temp; } } } for(j=19;j>0;j--){ for(i=0;i<j;i++){ if(shainData[i][1]<shainData[i+1][1]){ Temp=shainData[i][1]; shainData[i][1]=shainData[i+1][1]; shainData[i+1][1]=Temp; } } } for(i=0;i<20;i++){ printf("%d %d\n", shainData[i][1],shainData[i][2]); } }

  • c言語のクイックソートなんですが・・・

    以下のプログラミングなのですが、***のところが分かりません。 どなたか教えていただけないでしょうか? (よろしければ、前後の必要なところも書いていただけると幸いです) void quicksort(int l, int r) { int i,j,p,w; i=***; j=***; p=a[(int)((l+r)/2)]; while(i<=j) { while(a[i]<p) i++; while(p<a[j]) ***; if(i<=j) { w=a[i];a[i]=a[j];***; i++;***; } } if(l<j) quicksort(l,j); if(i<r) ***; }

  • このプログラムの間違えって??

    このクイックソートプログラムうまくいかないのですがどこかちがいますか?? quicksort(inta[], intl, intr){ intv, i, j, t; if (r > l) { v = a[r]; i = l-1; j = r; for (; ;) { while (a[++i] < v) ; while (a[--j] > v) ; if (i >= j) break; swap(&a[i],&a[j]); } swap(&a[i],&a[r]); quicksort(a, l, i-1); quicksort(a, i+1, r) } }

  • スタックとキューの違いを示すプログラム。

    学校でスタックとキューの違いを示せという課題が出たのですが、どうしてもわからなかったので、苦し紛れに質問させていただきました…。 いろいろ情報を集めて分からないながらにも以下のプログラムを書いてみたのですがスタックはできてもキューが実現できません。 あまり内部の処理を書き変えずに以下のスタックのプログラムをキューに書き換えたいのですがどうしたらいいでしょうか? ポインタを利用した連結リスト構造です。 #include <stdio.h> #include <stdlib.h> struct Cell//構造体Cellの定義 { int element; Cell* p_prev; Cell* p_next; }; void Cell_Initialize(Cell* p)//要素を初期化用 { p->element = -1; p->p_next = NULL; p->p_prev = NULL; } void Push(Cell* p, int val) { Cell* p_temp = p; while(1) { if(p != NULL) { if(p_temp->p_next == NULL) { p_temp->p_next = (Cell*)malloc(sizeof(Cell));//新しいセルを作成するときのメモリの確保 Cell_Initialize(p_temp->p_next);//初期化 p_temp->p_next->element = val; p_temp->p_next->p_prev = p_temp; break; } else { p_temp = p_temp->p_next; } } } } int Pop(Cell* p) { Cell* p_temp = p; int temp; while(1) { if(p != NULL) { if(p_temp->p_next == NULL) { break; } else { p_temp = p_temp->p_next; } } } if(p_temp->p_prev != NULL) { temp = p_temp->element; p_temp->p_prev->p_next = NULL; free(p_temp); p_temp = NULL; return temp; } else if(p_temp->element != -1) { temp = p_temp->element; Cell_Initialize(p_temp); return temp; } return -1; } void main() { Cell* p_list = NULL; p_list = (Cell*)malloc(sizeof(Cell)); Cell_Initialize(p_list); for(int i = 1; i < 7; i++) { int temp; printf("%d文字目入力してください:",i); scanf("%d",&temp); Push(p_list, temp); } while(1) { int temp = Pop(p_list); if(temp != -1) { printf("[%d]\n\n",temp); } else { break; } } } 長文になってしまいすみません。 どなたかよろしくお願いします。

  • クイックソート後の出力(pascal)

    20個の整数データをクイックソートして出力せよ、という課題が出ました。クイックソートまでは出来た(コンパイルできたのでおそらく)のですが、その順に出力する方法がわかりません。どなたかお教えください。 program sort(input,output); const n = 20; type index = 1..n; var A : array[1..n] of integer; i,x,a : integer; p,j,k : index; function PIVOT(i,j : index):integer; var k:index; begin k:=i+1; while (A[i]=A[k]) and (k<=j) do k:=k+1; if k>j then PIVOT:=0 else if A[i]>=A[k] then PIVOT:=i else PIVOT:=k end; procedure SWAP(var x,y:integer); var temp:integer; begin temp:=x; x:=y; y:=temp end; procedure PARTITION(i,j:index; a:integer; var k:index); var l,r:index; begin l:=i; r:=j; while A[l]<a do l:=l+1; while A[r]>=a do r:=r-1; while l<=r do begin SWAP(A[l],A[r]); l:=l+1; r:=r-1; while A[l]<a do l:=l+1; while A[r]>=a do r:=r-1; end; k:=l end; procedure QUICKSORT(i,j:index); var a:integer; p:index; k:index; begin p:=PIVOT(i,j); if p<>0 then begin a:=A[p]; PARTITION(i,j,a,k); QUICKSORT(i,k-1); QUICKSORT(k,j) end end; begin i:=0; i:=1+1; for i:= 1 to n do begin A[i]:=0; end; i:=0; i:=i+1; for i:= 1 to n do begin readln(x); A[i]:=x end; a:=PIVOT(p,j); PARTITION(p,j,A[a],k); QUICKSORT(p,j) end. QUICKSORT(p,j)とend. の間に出力方法を書き込みたいのです。

  • 数字を横一列に並べるには

    I,J,K,L列のように行ごとに横一列に数字を並べるにはどうしたらいいですか。度々すみません。(>_<)よろしくお願いします。<m(__)m>

  • クイックソート

    今クイックソートのプログラム作成をしていますが、分からない箇所が幾つかあります。下は、作成した時のプログラムリストです。 class QuickSort{ static int compare = 0;   static int copy = 0;    static int swap = 0; static void swap(int a[], int i, int j){    int tmp; tmp = a[i];copy++; a[i] = a[j];copy++; a[j] = tmp;copy++; swap++;} static void showArray(int a[], int l, int r){//配列の内容を表示するメソッドで、動作:部分配列a[l]~a[r]の要素を表示。これが分かりません。     int a[l] = {1,2,3,4,5,6,7,8,9,10}; int a[r] = {11,12,13,14,15,16,17,18,19,20};} static void initArray(int a[], int N){ int i;     a[0]=0; for(i=1;i<N;i++) a[i] = i; for(i=1;i<N;i++){ int j,k; j = (int)(java.lang.Math.random()*(N-1)) + 1; k = (int)(java.lang.Math.random()*(N-1)) + 1; swap(a,j,k);}} public static void (int a[],int l, int r) { if (r+1-l <= 1) return; int e = (l+r+1)/2; int c = 0; return a[c]; } static int partition(int a[], int l, int r, int pivot){// 配列の分割を行うメソッドです。そのあと分割に要した比較回数(=iの増加分+jの減少分)を変数compareに加算し、iの値を戻り値として返さないといけませんが、そこんとこが分かりません。 while (true) { while (a[l] < pivot) l = l + 1; while (a[r] >= pivot) r = r - 1; if (l > r) return l; swap(a, l, r); } } static void swap(int[] a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } int i=0; int j=0; return i; } static void quicksort(int[] a, int l, int r){//(カットオフなしで)再帰的にクイックソートを行うメソッドです。paritionメソッドを用い、a[l]~a[r]を分割値a[r]で分割するのが条件ですが、ここも全然分かりません。 if(l < r){ int i = l; int j = r; int x = a[(i+j)/2]; do{ while(a[i]<x) i++; while(a[j]>x) j--; if(i<=j) { swap(a,i,j); i++; j--; } }while(i<=j); quickort(a,l,j); quicksort(a,i,r); } } static void swap(int[] a, int s, int t){ int temp = a[s]; a[s] = a[t]; a[t] = temp; return; int i,pivot; } public static void main(String args[]){ //上で作ったメソッドを用いて、ソート過程を表示しながらクイックソートを実行 //手順は次のようになる。     1.要素を(20個もつ)整数型配列aを宣言     2.整数型変数Nに配列aの要素数を保存     3.initArrayメソッドを用いて配列aを初期化 4.showArrayメソッドを用いてソート前の配列aの内容を表示 5.変数compare,copyの値を0に初期化 6.quickSortメソッドを用いて配列aを選択ソート     7.showArrayメソッドを用いてソート後の配列aの内容を表示 8.ソートにかかった比較・コピーの回数を表示 //これも分かりません。 } 分かる人がいましたら教えて下さい。お願いします。

  • *至急 perl 違うところの修正と説明をお願いします。

    この間質問したのですが、全く解決できないので再度お願いします。 Aというファイルを読み込んで、最大最小・平均を求めたいです。専門用語をできるだけ使わないで答えてください!! #!/usr/bin/perl # 12345 STDIN use strict; use warnings; open ( FILEHANDLE , " < A " ) ;  #Aを読み取ってnumbersに当てはめる my $Minimum=$ARGV[0]; #最小値に一番最初の値を当てはめる。 my $Maximum=$Minimum; #ひとまず最大値=最小値(両方とも一番最初)とおく my $Sum=$Minimum;     #?  my $temp=0;        #?temp my $i=1;    #numbersの最初の値iを初期化 while ( $i < $Num_arg){  #?(iと最初の値を比べる??) $temp=$ARGV[$i];      #? if ( $Minimum > $temp ) { #最小値と数字を比べる。 $Minimum = $temp;     #小さかったらその値を最小値と置く }elsif ( $Maximum < $temp ){ #最小値に当てはまらなかったら最大値と比べる。 $Maximum = $temp;    #大きかったらその値を最大値と置く。 } $Sum = $Sum + $temp;  #? $i++;         #最初の値iに1を足す。そしてループさせる } my $Average = $Sum / $Num_arg; #平均=合計÷全部の数 my $w =          #wをしたのforeach文で出た値と置く。 foreach my $w(0..$#Numbers){  #Numbersの最初から最後までやる(Σシグマとおなじ) ($Num_arg - $Average) ** / $Num_arg;  #Numbersのi番目の値から平均値を引き2剰そしてNumbersの数で割る。 } my $Standarddivitation = sqrt ($w); #標準偏差=wの平方根 print "Average value = $Average \n"; print "Maximum Value = $Maximum \n"; print "Minimum Value = $Minimum \n"; print "Standard devitation = $Standarddevitation; 私がやっていると思っているのが#のところです。?の部分はよく分かりません><。 何で違うかと間違っているところを(簡単なものを使って)修正してください。 気がついたのはNumbersとNum_arg(i番目をあらわしていることと総数を表している)とがばらばらなことです。 よろしくお願いします。