2016-10-04 16 views
0

上記のものと同様に塗りつぶしたN * Nスパイラル行列の場合、R =行の数C =列の番号。5×5のスパイラル行列で[R、C]を見つけよう

私はまだ初心者ですので、あまり進まないでください。

私はスパイラル行列と混同していますが、これもうまくいくでしょうが、通常の行列用に設計されており、スパイラルなので最適な解を理解したいと思います。ありがとうございました。

#include<stdio.h> 

/* Searches the element x in mat[][]. If the element is found, 
    then prints its position and returns true, otherwise prints 
    "not found" and returns false */ 
int search(int mat[4][4], int n, int x) 
{ 
    int i = 0, j = n-1; //set indexes for top right element 
    while (i < n && j >= 0) 
    { 
     if (mat[i][j] == x) 
     { 
     printf("\n Found at %d, %d", i, j); 
     return 1; 
     } 
     if (mat[i][j] > x) 
     j--; 
     else // if mat[i][j] < x 
     i++; 
    } 

    printf("\n Element not found"); 
    return 0; // if (i==n || j== -1) 
} 
+1

まず(RC使用1ベースのインデックスことに注意してください)、スパイラル行列の定義は何ですか? 第2に、このコードを使用して問題を解決しようとしており、正確に何が苦労していますか? – galfisher

+0

ヒント:関数プロトタイプは 'int getnum(int n、int r、int c)'でなければなりません。関数は行列のコピーを必要としません。実際、これはほんの数学の問題です。キーボードを脇に置き、鉛筆と紙を拾います。 – user3386109

+0

"** 5 * 5 **の行列で[R、C]を見つける" - 'int mat [4] [4]' - 何か気付いていますか? – Olaf

答えて

0

ここでは再帰を使用します。検索対象の要素がNxNスパイラル行列の境界要素でない場合、境界線を削除して、今形成された(N-2)x(N-2)スパイラル行列で要素をチェックすることができるという事実を理解する。 次のコードではこのロジックを使用しています。すべての

import java.util.*; 
class SpiralElement{ 
    static int getElement(int N, int R, int C){ 
     if(R != 1 && C != 1 && R != N && C != N)return getElement(N-2, R-1, C-1);   
     else{ 
      if(R == 1)return N*N+1-C; 
      else if(C == 1)return (N*N) - (N)-(N-1)-(N-2) - (N-R); 
      else if(R == N)return (N*N) - (N) - (N-1) - (N-2) + (C-1); 
      else return (N*N) - (N) - (R-2); 
     } 
    } 
    static void main(){ 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter N, R, C"); 
     int N = sc.nextInt(); 
     int R = sc.nextInt(); 
     int C = sc.nextInt(); 
     if(N%2 == 0){ 
      R = N-R+1; // mirroring the position as highest element(N*N) is now the bottom-right element and not top-left 
      C = N-C+1; 
     } 
     System.out.println(getElement(N,R,C)); 
    } 
} 
関連する問題