杭电 acm 1716 java 实现 格式很变态

来源:互联网 发布:单片机汇编set 编辑:程序博客网 时间:2024/06/09 21:53

这道题格式好麻烦,一直presentation error,改了好久,去掉了行末尾的空格,但是最后当输入0 0 0 0 时空行还无法去掉,因为我用的不是二维数组,无法判断下一行输入的是不是0 0 0 0,结果是一开始就走了弯路,再改变成二维格式也很麻烦,就先把pe版放在这了,懒得再改



Problem Description
Ray又对数字的列产生了兴趣:
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
 

Input
每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。
 

Output
对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。
每组输出数据间空一行,最后一组数据后面没有空行。
 

Sample Input
1 2 3 41 1 2 30 1 2 30 0 0 0
 

Sample Output
1234 1243 1324 1342 1423 14322134 2143 2314 2341 2413 24313124 3142 3214 3241 3412 34214123 4132 4213 4231 4312 43211123 1132 1213 1231 1312 13212113 2131 23113112 3121 32111023 1032 1203 1230 1302 13202013 2031 2103 2130 2301 23103012 3021 3102 3120 3201 3210
import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;public class Main {public static void main(String[] args) throws IOException {  // Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(new FileInputStream("resource/A.in"))));//从文件读入输入   //BufferedReader只能读入以字符形式装入的流,BufferedReader(Reader in),   //new BufferedReader(new InputStream(new FileInputStream("resource/A.in")))是错误的Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));while(sc.hasNextLine())   {   String str=sc.nextLine();   String num[]=new String[4];   String numfinate[]=new String[24];//记录排列的 数,不包含以0开头,但包含重复的   int b=0;   int length = 0;//记录得到的numfinate不为空的长度   //num=str.toCharArray();   num=str.split(" ");//取出四个数字   //如果为4个0即退出   if(num[0].equals("0")&&num[1].equals("0")&&num[2].equals("0")&&num[3].equals("0"))   {   return;   }   //将四个数字排序,加快后面的排序,考虑后面不用冒泡排序,对于已经排好序的应该有更好的排序方式   sort(num);   //由四个数字组成四位数,不包含以0开头,但包含重复的   for(int i=0;i<4;i++)   {   String numfinate1=null;     while(Integer.parseInt(num[i])==0)   {   i++;   }   numfinate1=numfinate1+num[i];   for(int j=0;j<4;j++)   {      if(j!=i)   {   String numfinate2 =numfinate1+num[j];      for(int m=0;m<4;m++)   {   if(m!=j&&m!=i)   {   String numfinate3=numfinate2+num[m];   numfinate3=numfinate3.replaceAll("null", "");   numfinate[b++]=numfinate3+num[6-i-j-m];//num[6-i-j-m]为四个数字中剩下的最后一个数       length++;   }         }   }   }    }   //对得到的四位数排序   sort(numfinate);      for(int i=0;i<length;i++)   {   if(i!=0)   {   if(!numfinate[i].equals(numfinate[i-1]))   {//判断首位是否相同,相同的在同一行   String prev=numfinate[i-1];//prev记录的是与当前numfinate[i]不同的numfinate[i-1]     while((i!=length-1)&&numfinate[i].equals(numfinate[i+1]))   {   i++;   }        if(numfinate[i].charAt(0)==prev.charAt(0))   {   if(i!=length-1)   {   if(numfinate[i].charAt(0)==numfinate[i+1].charAt(0))   {   System.out.print(numfinate[i]+" ");   }   else   {   System.out.print(numfinate[i]);   }   }   else   {   System.out.print(numfinate[i]);   }      }   else   {   System.out.println();   System.out.print(numfinate[i]+" ");   }      }   }   else   {   System.out.print(numfinate[i]+" ");   }        }   System.out.println();System.out.println();   }         }public static void sort(String []num){int count=0;//记录num中不为null的个数for(int i=0;i<num.length;i++){if(num[i]!=null){count++;}}int tonum[]=new int[count];//将字符串数组中的数转换为整型for(int i=0;i<count;i++){tonum[i]=Integer.parseInt(num[i]);}for(int j=0;j<count-1;j++){for(int m=0;m<count-1-j;m++){if(tonum[m]>tonum[m+1]){int temp=tonum[m+1];tonum[m+1]=tonum[m];tonum[m]=temp;}}}for(int i=0;i<count;i++){num[i]=String.valueOf(tonum[i]);//System.out.print(num[i]+" ");}//System.out.println("sort");} }


原创粉丝点击