hdu1106(排序,java水过)

27 篇文章 0 订阅
26 篇文章 0 订阅

hdu1106

思路:先以字符串形式输入,以5为界限,分别装入数组中,然后将字符数组转换为整型,最后进行排序输出。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
      
      
import java.util.* ;
class Main {
public static void main ( String agrs []){
Scanner sc = new Scanner ( System . in );
while ( sc . hasNext ()){
String str = sc . next ();
//System.out.println(str);
int k = 0 , s = 0 ;
int [] a = new int [ 1000 ];
char [] ch = null ;
boolean flag = false ;
ch = str . toCharArray ();//将字符串转换为字符数组
for ( int i = 0 ; i < ch . length ; i ++){
if ( ch [ i ]!= '5' ){//以5为界限,将字符转化为整型放入数组
flag = true ;//处理假如第一个为5是出现的特殊情况
a [ k ]= s + ch [ i ]- 48 ;
s = a [ k ]* 10 ;
} else if ( i != 0 && i != ch . length - 1 ){
if ( ch [ i + 1 ]!= '5' && flag ){//处理多个5在一起时出现的特殊情况
k += 1 ; s = 0 ;
}
}
}
/*for(int i=0;i<=k;i++){
System.out.println(a[i]);
}*/
sort ( a , k + 1 );
for ( int i = 0 ; i < k ; i ++){
System . out . print ( a [ i ]+ " " );
}
System . out . println ( a [ k ]);
}
}
public static void sort ( int [] a , int n ){//进行排序(选择排序法)
int min ;
for ( int i = 0 ; i < n - 1 ; i ++){
min = i ;
for ( int j = i + 1 ; j < n ; j ++){
if ( a [ min ]> a [ j ])
min = j ;
}
if ( i != min ){
a [ i ]= a [ i ]^ a [ min ];
a [ min ]= a [ i ]^ a [ min ];
a [ i ]= a [ i ]^ a [ min ];
}
}
}
}
用java里的split方法对字符串的处理就容易多了
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
             
             
import java.util.* ;
class Main {
public static void main ( String agrs []){
Scanner sc = new Scanner ( System . in );
while ( sc . hasNext ()){
String str = sc . next ();
//System.out.println(str);;
int [] a = new int [ 1000 ];
char [] ch = null ;
boolean flag = false ;
String strs []= str . split ( "5" );//字符串中以五为界限将字符串划分为多个子字符串
int k = 0 ;
for ( int i = 0 ; i < strs . length ; i ++){
if ( strs [ i ]. length ()!= 0 ){//判断子字符串是否为空
k ++;
//System.out.println(strs[i]+" ");
a [ k - 1 ]= fun ( strs [ i ]);//子字符串转换为整数
}
}
sort ( a , k );
for ( int i = 0 ; i < k - 1 ; i ++){
System . out . print ( a [ i ]+ " " );
}
System . out . println ( a [ k - 1 ]);
}
}
public static void sort ( int [] a , int n ){//排序
int min ;
for ( int i = 0 ; i < n - 1 ; i ++){
min = i ;
for ( int j = i + 1 ; j < n ; j ++){
if ( a [ min ]> a [ j ])
min = j ;
}
if ( i != min ){
a [ i ]= a [ i ]^ a [ min ];
a [ min ]= a [ i ]^ a [ min ];
a [ i ]= a [ i ]^ a [ min ];
}
}
}
public static int fun ( String str ){//将字符串转化为整数
int s = 0 , sum = 0 ;
for ( int i = 0 ; i < str . length (); i ++){
sum = s + str . charAt ( i )- 48 ;
s = sum * 10 ;
}
return sum ;
}
}
数据测试:
00005051231232050775
0 0 77 12312320
50512312320555507750005
0 0 77 12312320
505123123205077
0 77 12312320
051231232055077
0 77 12312320
5550
0
1155663535006555
3 6 11 663
10000000055051120
0 1120 100000000
00060054
4 600

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值