杭电HDU-1106排序

 

排序

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 27693    Accepted Submission(s): 7610


Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
 
 
 
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
 

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
 

Output
 
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 

Sample Input
 
0051231232050775
 

Sample Output
0 77 12312320
Source
POJ
 

java做法:

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner (System.in);
        while(sc.hasNext()){        
            String ss = sc.next();    
                String [] str = ss.split("5"); //放入字符串数组               
                int []arr=new int[str.length];
                int j=0;
            for(int i=0; i < str.length; i++){
                if(!str[i].equals(""))//注意过滤空串(由于分割相连的5造成的)!!!
                 arr[j++] = Integer.valueOf(str[i]);
            }
            Arrays.sort(arr,0,j);        
            for(int i=0 ; i< j; i++){
                
                    System.out.print(i!=0?" "+arr[i]:arr[i]);//小心PE!!!
                
                    
            }
            System.out.println();
                
        }
        

    }

}


 

import java.util.*;
import java.io.*;
 
public class HDU1106 
 {
     public static void main(String[] args)
     {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         String s;
         while((s=br.readLine())!=null)
         {
       //去掉字符串中空格,防止useDelimiter连续读取整数出错
            Scanner sc = new Scanner(s.trim());
             int k = 0;
             int a[];
             a=new int[1001];
       //匹配正则表达式,5+表示匹配一个或多个5,不会产生空字符
             sc.useDelimiter("5+");
             while(sc.hasNextInt())
               a[k++]=sc.nextInt();
            sc.close();
             Arrays.sort(a,0,k);
            for(int i=0;i<k;i++)
             {
                 if(i==k-1)
                     System.out.println(a[i]);
                else
                     System.out.print(a[i]+" ");
             }
        }
     }
 }

while(sc.hasNext()) {
    if(sc.hasNextInt()) {
        //do sth
    }else {
    //直接跳过
        next();
    }
}




C/C++代码:

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

#include<algorithm>
#include<stdlib.h>
using namespace std;


char a[1006],ok[1006];
int  t[1006];


int main (){
 int i,j,str;
  

 while(scanf("%s",a)!=EOF){//gets(a)!=NULL都可以
 

  str=strlen(a);
   

 int  end=0,flag=0,n=0,k=0,sum=0;
   for(i=0;i<str;){
       if(a[i]!='5'){//收集不为5的连续的数字字符
          

            ok[end++]=a[i++];
          flag=1;
          if(i!=str) continue;//注意!!!不写判断语句就会漏掉最后的5的后面的非5的数
       }
        if(flag){
     
             ok[end]='\0';
             t[n++]=atoi(ok);
              end=0;
              flag=0;
    }
     if(a[i]=='5'&&a[++i]!='5')//跳过5
   continue;
   }
   sort(t,t+n );//排序
      for(i=0;i<n-1;i++)
      printf("%d ",t[i]);
      printf("%d\n",t[n-1]);
}
return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值