PKU-1002使用java编写用快速排序为何一直Runtime Error 无解 留下问题 以后再看

来源:互联网 发布:软件设计师准考证 编辑:程序博客网 时间:2024/06/05 19:09

题目参照PKU1002

下面是代码:java版 各类数据皆有解 就是一直Runtime Error  无解。。。。。。。。

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    void qsString(int[][] a,int p,int r){
        int q,i=p,j=r;
        int[] x=new int[100001];
        int[] temp=new int[100001];
        x=a[p];
        if(p>=r) return;
        while(true){
            while(Arrays.toString(a[i]).compareTo(Arrays.toString(x))<0) i++;
            while(Arrays.toString(a[j]).compareTo(Arrays.toString(x))>0) j--;
            if(i<j){
                temp=a[i];a[i]=a[j];a[j]=temp;
                i++;j--;
            }
            else break;
        }
        q=j;
        qsString(a,p,q);
        qsString(a,q+1,r);
    }
    public static void main(String args[]){
        int i,j,n,k,flag=0;
        int[][] num=new int[100001][7];
        Main m=new Main();
        Scanner in=new Scanner(System.in);
        String str,strn;
        strn=in.nextLine();
        n=Integer.parseInt(strn);
        for(i=0;i<n;i++){
            k=0;
            str=in.nextLine();
            for(j=0;j<str.length()&&k<7;j++)
                if(str.charAt(j)!='-') {
                    if(str.charAt(j)=='A'||str.charAt(j)=='B'||str.charAt(j)=='C')
                        num[i][k]=2;
                    else if(str.charAt(j)=='D'||str.charAt(j)=='E'||str.charAt(j)=='F')
                        num[i][k]=3;
                    else if(str.charAt(j)=='G'||str.charAt(j)=='H'||str.charAt(j)=='I')
                        num[i][k]=4;
                    else if(str.charAt(j)=='J'||str.charAt(j)=='K'||str.charAt(j)=='L')
                        num[i][k]=5;
                    else if(str.charAt(j)=='M'||str.charAt(j)=='N'||str.charAt(j)=='O')
                        num[i][k]=6;
                    else if(str.charAt(j)=='R'||str.charAt(j)=='S'||str.charAt(j)=='P')
                        num[i][k]=7;
                    else if(str.charAt(j)=='U'||str.charAt(j)=='V'||str.charAt(j)=='T')
                        num[i][k]=8;
                    else if(str.charAt(j)=='X'||str.charAt(j)=='Y'||str.charAt(j)=='W')
                        num[i][k]=9;
                    else
                        num[i][k]=Integer.parseInt(str.substring(j, j + 1));
                    k++;
                }
        }
        m.qsString(num,0,n-1);
        for(i=0;i<n;){
            j=i+1;
            while(Arrays.equals(num[i], num[j])) j++;
            if((j-i)>1){
                flag=-1;
                for(k=0;k<7;k++){
                    System.out.print(num[i][k]);
                    if(k==2) System.out.print("-");
                }
                System.out.println(" "+(j-i));
            }
            i=j+1;
        }
        if(flag==0) System.out.println("No duplicates.");

    }

}

 

同时附上别人的C++ AC了的代码 以供参考

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int sort_function(const void *a,const void *b) 
{
        return(strcmp((char*)a,(char*)b)); 
}  

int main()
{
 long n,i,j,k,leng;
 char ch[100],num[10],ccc[100001][10];
 int flag;
 scanf("%ld",&n);
 getchar();
 for(i=0;i<n;i++)
 {
  gets(ch);
  leng=strlen(ch);
  for(j=0,k=0;j<leng;j++)
  {
   if(ch[j]=='A'||ch[j]=='B'||ch[j]=='C')   num[k++]='2';
   if(ch[j]=='D'||ch[j]=='E'||ch[j]=='F')   num[k++]='3'; 
   if(ch[j]=='G'||ch[j]=='H'||ch[j]=='I')   num[k++]='4';
   if(ch[j]=='J'||ch[j]=='K'||ch[j]=='L')   num[k++]='5';
   if(ch[j]=='M'||ch[j]=='N'||ch[j]=='O')   num[k++]='6';
   if(ch[j]=='P'||ch[j]=='R'||ch[j]=='S')   num[k++]='7';
   if(ch[j]=='T'||ch[j]=='U'||ch[j]=='V')   num[k++]='8';
   if(ch[j]=='W'||ch[j]=='X'||ch[j]=='Y')   num[k++]='9';
   if(ch[j]=='-')         continue;
   if(ch[j]>='0'&&ch[j]<='9')      num[k++]=ch[j];
   if(k==3)          num[k++]='-';
   if(k==8)          break;
  }
  num[k]='/0';
  strcpy(ccc[i],num);
 }

 qsort((void*)ccc, n, sizeof(ccc[0]), sort_function);

 flag=0;
 for(i=0;i<n;i=j)
 {
  for(j=i+1;j<n;j++)
  {
   if(strcmp(ccc[j],ccc[i])!=0)
    break;
  }
  if(j-i!=1)
  {
   printf("%s %d/n",ccc[i],j-i);
   flag=1;
  }
 }
 if(flag==0)
  printf("No duplicates./n");
 return 0;
}

 

 

原创粉丝点击