2013-07-24 53 views
-4

這是我的代碼。我有1個錯誤。請幫幫我。排列週期

Try this input: 
8 
1 2 3 4 5 6 7 8 

............................................ ...............................................

import java.io.*; 

public class permutation 
{ 
    public static void main (String []args) throws IOException 
    { 
     BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in)); 
     String n=""; 
     int parsen=0, parsenum=0; 
     System.out.println(n); 
     n = dataIn.readLine(); 
     parsen=Integer.parseInt(n); 
     String num[]= new String [1000]; 
     int visited[]=new int [1000]; 
     int vindex[]=new int [2000]; 
     int a=0; 
     for(int i=1;i<=parsen;i++){ 
      num[i-1]=dataIn.readLine(); 
      parsenum=Integer.parseInt(num[i-1]); 
     } 
     int t_visited=0, cycles=0, start=0, index=0; 

     while(t_visited<parsen) 
     { 
      for(int i=1; i<=parsen;i++) 
      { 
       if(visited[i]==0) 
       { 
        vindex[start]=i; 
        visited[i]=1; 
        t_visited++; 
        index=start; 
        break; 
       } 
      } 
      while(true) 
      { 
       index++; 
       vindex[index]=parsenum[vindex[index-1]]; 

       if(vindex[index]==vindex[start]) 
        break; 
       visited[vindex[index]]=1; 
       t_visited++; 

       vindex[++index]=0; 
       start=index+1; 
       cycles++; 
      } 
      System.out.println(cycles+vindex[0]); 
      for(int i=0;i<(parsen+2*cycles);i++) 
      { 
       if(vindex[i]==0) 
       { 
        System.out.println(); 
       }else{ 
        System.out.println(vindex[i]); 
       } 
      } 
     } 
    } 
} 

謝謝!

另一個代碼: 工作但輸出錯誤。幫助請...我將num聲明爲一個整數。

import java.io.*; 

public class permutation 
{ 
public static void main (String []args) throws IOException 
{ 
    BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in)); 
    String n=""; 
    int parsen=0; 
    System.out.println(n); 
    n = dataIn.readLine(); 
    parsen=Integer.parseInt(n); 
    int num[]= new int [1000]; 
    int visited[]=new int [1000]; 
    int vindex[]=new int [2000]; 
    int a=0; 
    for(int i=1;i<=parsen;i++){ 
     num[i-1] = Integer.parseInt(System.console().readLine()); 
    } 
     int t_visited=0, cycles=0, start=0, index=0; 

    while(t_visited<parsen) 
    { 
     for(int b=1; b<=parsen;b++) 
     { 
      if(visited[b]==0) 
      { 
       vindex[start]=b; 
       visited[b]=1; 
       t_visited++; 
       index=start; 
       break; 
      } 
     } 
     while(true) 
     { 
      index++; 
      vindex[index]=num[vindex[index-1]]; 

     if(vindex[index]==vindex[start]) 
      break; 
     visited[vindex[index]]=1; 
     t_visited++; 

     vindex[++index]=0; 
     start=index+1; 
     cycles++; 
     } 
     System.out.println(cycles+vindex[0]); 
     for(int c=0;c<(parsen+2*cycles);c++) 
     { 
      if(vindex[c]==0) 
      { 
       System.out.println(); 
      }else{ 
       System.out.print(vindex[c]); 
      } 
     } 
    } 
} 
} 

的輸出必須

1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
+3

你會得到什麼錯誤? – Math

+0

錯誤說: permutation.java:39:錯誤:數組需要,但int發現 vindex [index] = parsenum [vindex [index-1]]; ^ 1錯誤 –

+0

parsenum不是一個數組。 – hexafraction

回答

2

parsenumint - 但你使用它,彷彿它是一個數組:parsenum[vindex[index-1]]。這是行不通的。

+0

ahh ..所以當我把輸入是8時,它會說8 [vindex [index-1]] ..這是錯誤的。除了放入parsenum,它會是什麼? –

0

而不是聲明int parsenum=0;您將不得不聲明int parsenum[10];其中10將是您的數組大小。

+0

'parsen-1'應該是合適的長度 – 2013-07-24 14:26:02

+0

我仍然試圖理解代碼..你是怎麼意識到這一點的? – Math

+0

如果我是正確的,那麼首先'for'循環只能運行最大parsen-1。可能會稍微偏離。 – 2013-07-24 14:28:55