2017-09-09 6 views
0

変数に対する手動アルゴリズムのみが許可されます。リスト、配列などのコレクションは使用されません。 (私はプログラムで.length()関数を使用しましたが、すべての入力の後にスペースを入れ、スペースが見つかるまで文字の数を数えることで手動で行うことができます)配列や他のコレクションを使用する関数を使用せずにユーザーが指定したn個の値の中央値を求める

+0

、受け入れられたとして、あなたの答えをマーク。それはあなたの答えの前にあるv形のものです。クリックすると緑色に変わります。 – rene

答えて

0

配列を使用すると解決する問題は、ユーザーが入力する任意の数の値。これは文字列に値を格納することで解決できます。私たちは数字を構成するために文字列からいくつの文字を選ぶべきかを知る必要があるので、数字の長さを別々の文字列に格納しています(長さは一般に1桁です) n番目の数の長さがlengthstorage文字列のn番目の文字であろうと)

アルゴリズム:

  1. は、文字列から数値を取り、ストリング内の他のすべての数からそれを引きます。
  2. 結果が肯定的な場合は、int 'pos'に1を加えます。負の場合は 'neg'に、ゼロの場合は 'コピー'します。
  3. 奇数の数字が入力された場合、pos + copy> = n/2およびneg + copy> = n/2の数値が中央値になります。
  4. 偶数の数字を入力すると、平均が中央値になる2つの中間の数値fmedianとsmedianがあります。 (アルゴリズムのコードを参照してください)。代わりに、あなたのタイトルに解決追加する


import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    String input,inputstorage,lengthstorage,inputlength; 
    int nonrep=0; 
    System.out.println("Enter the number of values"); 
    int n = sc.nextInt(); 
    int fmedian=0,smedian=0; 
    System.out.println("Enter a value"); 
    input= sc.next();                 //String 
    inputlength = "" + (char)(input.length()+48); 
    inputstorage = input; 
    lengthstorage = inputlength; 
    for (int i=1; i<n; i++) 
    { 
     System.out.println("Enter a value"); 
     input = sc.next(); 
     inputstorage = inputstorage + input; 
     lengthstorage = lengthstorage + (char)(input.length()+48); 
    }     

    int mainnumpos = 0; 

    for(int j=0;j<n;j++) 
    { 
     int copy=0; 
     int mainnumlength = lengthstorage.charAt(j) - 48; 
     int neg=0,pos=0; 
     int mainnum = 0; int factor = 1;int mainnumsign = 0; 
     for (int m =mainnumlength-1; m >= 0; m--) 
     { 
     if(inputstorage.charAt(mainnumpos+m)=='-') 
     { 
      mainnumsign = 1; 
     } 
     else 
     { 
     mainnum += (inputstorage.charAt(mainnumpos+m) - '0') * factor; 
     factor *= 10; 
     } 
     } 
     mainnumpos = mainnumpos + mainnumlength; 
     if(mainnumsign==1) 
     { 
      mainnum = -mainnum; 
     } 

     int position = 0; 
     for (int q=0;q<n;q++) 

     { int fnumsign = 0; 


     int fnumlength = lengthstorage.charAt(q) - 48; 

     int fnum = 0; 
     factor = 1; 
     for (int l =fnumlength-1; l >= 0; l--) 
     { 
      if(inputstorage.charAt(position+l)=='-') 
      { 
      fnumsign = 1; 
      } 
      else{ 
     fnum += (inputstorage.charAt(position+l) - '0') * factor; 
     factor *= 10; 
      } 
     } 
     if(fnumsign==1) 
     { 
      fnum = -fnum; 
     } 
     if((mainnum-fnum)>0) 
     { 
      pos++; 
     } 
     else if((mainnum-fnum)<0) 
     { 
      neg++; 
     } 
     else{ 
      copy++; 
      } 
     position = position + fnumlength; 



     } 

     if((n%2)!=0){ 

    if((double)(pos+copy)>=((double)n)/2.0 && (double)(neg+copy)>=((double)n)/2.0) 
    { 
     if(nonrep==0) 
     { 
     System.out.println("The median is: "+ mainnum); 
     nonrep++; 
     }       
    } 
    } 
    else 
    { 
     if ((double)(pos+copy)==(double)n/2.0) 
     { 
     fmedian=mainnum; 
     } 
     else if((double)(neg+copy)==(double)n/2.0) 
     { 
     smedian = mainnum; 
     } 
     else if((double)(pos+copy)>=(double)n/2.0 && (double)(neg+copy)>=(double)n/2.0 ) 
     { 
     fmedian = mainnum; 
     smedian = mainnum; 
     } 
     if(j==n-1){ 
     double evenmedian = ((double)(smedian + fmedian))/2.0; 
     System.out.println("The median is: "+evenmedian); 
     } 
    } 
    } 

    } 
} 
関連する問題