【问题标题】:Permutation Cycle [closed]排列循环[关闭]
【发布时间】:2013-07-24 14:16:54
【问题描述】:

这是我的代码。我有 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

【问题讨论】:

  • 你得到什么错误?
  • 错误说:permutation.java:39: error: array required, but int found vindex[index]=parsenum[vindex[index-1]]; ^ 1 个错误
  • parsenum 不是数组。
  • parsenum 不是一个数组,而是一个 int。 - 你调试过这段代码吗?
  • 请编辑您的问题以添加相关信息。即在问题中添加运行此程序时遇到的具体错误。

标签: java permutation


【解决方案1】:

parsenum 是一个int - 但你可以将它当作一个数组来使用:parsenum[vindex[index-1]]。那是行不通的。

【讨论】:

  • 啊..所以当我输入 8 时,它会说 8[vindex[index-1]]..这是错误的..而不是输入 parsenum,它会是什么?
【解决方案2】:

您必须声明 int parsenum[10]; 而不是声明 int parsenum=0;,其中 10 将是您的数组的大小。

【讨论】:

  • parsen-1 应该是合适的长度
  • 我仍在努力理解代码。你是如何意识到这一点的?
  • 如果我是正确的,第一个 for 循环只运行最大 parse-1。不过可能略有偏差。
  • 这行vindex[index]=parsenum[vindex[index-1]]; 让我很困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多