杭电oj重点题目(算法题)字符串水果,排序查找

&二分搜索(必会算法)

    public static int secondfen(int num[],int x)
    {
    	int left=0;
    	int right=num.length-1;
    	int ans=0;
    	while(left<=right)
    	{
    		int middle=(left+right)/2;
    
    		if(x==num[middle])
    		{
    		    ans=middle;
    		    break;
    		}
    		else if(x<num[middle])
    		{
    			right=middle-1;
    		}else{
    			left=middle+1;
    		}
    	}
    	
    	return ans;
    }

一,比较器

    package HROffer;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import java.util.Scanner;
    /**
     * 
     * @author lizhenqin
     *
     */
    
    public class Compare1{
            public static void main(String [] args)
            {
                    Scanner cin=new Scanner(System.in);
                    int n=cin.nextInt();
                    cin.nextLine();
                    Student ss[]=new Student[n];
                    int flag=cin.nextInt();
                    List<Student> stu=new ArrayList<Student>();
                    for(int i=0;i<n;i++)
                    {
                    	    String name=cin.next();
                    	    int grade=cin.nextInt();
                            ss[i]=new Student(name,grade);
                            stu.add(ss[i]); 
                    }
                    Comparator  comp;
                    if(flag==0)
                    {
                    comp=new mycomparator1();
                    
                    }else{
                    comp=new mycomparator2();
                    }
                    Collections.sort(stu,comp);
                    for(Student s:stu)
                    {
                        //System.out.println(s.getName()+" "+s.getGrade());      
                    	System.out.println();
                    }
                   
                    
            }
            
    }
      class Student{
                    
                    private int grade;
                    private String name;
                    public Student()
                    {
                         super();   
                    }
                    public Student(String name,int grade)
                    {
                            super();
                            this.name=name;
                            this.grade=grade;
                    }
                    public String getName()
                    {
                           
                            return name;
                    }
                    public void setName(String name)
    
                    {
                            this.name=name;
                    }
                     public int getGrade()
                    {
                           
                           return grade;
                    }
                    public void setGrade(int grade)
    
                    {
                           this.grade=grade;
                    }
                    
    }
     
      class mycomparator1 implements Comparator<Student>
          {
                public int compare(Student s1,Student s2)
                {
                        int grade1=s1.getGrade();
                        int grade2=s2.getGrade();
                        
                        if(grade1<grade2)
                        {
                                return 1;
                        }else{
                                if(grade1>grade2)
                                {
                                        return -1;
                                }else{
                                        return 0;
                                }
                        }
                }
          }
            
      class mycomparator2 implements Comparator<Student>
      {
            public int compare(Student s1,Student s2)
            {
                    int grade1=s1.getGrade();
                    int grade2=s2.getGrade();
                    
                    if(grade1>grade2)
                    {
                            return 1;
                    }else{
                            if(grade1<grade2)
                            {
                                    return -1;
                            }else{
                                    return 0;
                            }
                    }
            }
      }
              

二,字符串翻转输出

    package 字符串处理回文;
    import java.util.Scanner;
    public class MOSTnEW字符串翻转刷出 {
    	 public static void main(String[] args) { 
    	 Scanner in = new Scanner(System.in);
    	 int n = in.nextInt();
    	 in.nextLine();
    	 for(int i=1;i<=n;i++){
    		 
    	 String s = in.nextLine();
    	 String[]ss = s.split(" "); 
    	 
    	 for(int j=0;j<ss.length;j++){ 
		 
	 StringBuilder builder = new StringBuilder(ss[j]);
	 
	 if(j+1==ss.length)System.out.print(builder.reverse().toString());
	 
	 else System.out.print(builder.reverse().toString()+" ");
	 }
	 
	int p = s.length()-1;
	 
	 while(s.charAt(p) == ' '){
	 System.out.print(' ');
	 p--;
	 
	

     }
    
     System.out.println();
     } 
     }
    }

(3)素数不超时解法

        package 规律算法题;
    import java.util.Scanner;
    /**
     * 30
    13 17
    20
    7 13
    
     * @author Administrator
     *
     */
    public class SuShu素数不超时解法 {
    	public static void main(String[] args) {
    	Scanner cin=new Scanner(System.in);
        while(cin.hasNext())
        {
        	int n=cin.nextInt();
        	int half=n/2;
        	int temp=0;
        	int i;
        	for(i=half;i>0;i--)
        	{
        		temp=2*half-i;
        		if(psushu(i)==1&&psushu(temp)==1)break;
        	}
        	System.out.println(i+" "+temp);	
     
        }
    	}
    static int psushu(int m)
    {
    	int sum=0;
    	for(int a=1;a<=Math.sqrt(m);a++)
    	{
    		if(m%a==0)
    		{
    			sum++;
    		}
    	}
    	return sum;
    }
    }
    

(5小球碰撞怒昂)

      package 面向对象类解;
 import java.util.Scanner;
 public class 小球碰撞问题 {
     static Ball [] ball=null;
 	public static void main(String[] args) {
 		// TODO Auto-generated method stub
     Scanner cin=new Scanner(System.in);
     while(cin.hasNext())
     {
     	int n=cin.nextInt();
     	int l=cin .nextInt();
     	int t=cin.nextInt();
     	ball=new Ball[n];
     	for(int i=0;i<n;i++)
     	{
     	ball[i]=new Ball(cin.nextInt(),1);
     	}
     	for(int s=0;s<t;s++)
 		{
     	for(int i=0;i<n;i++)
     	{
     		
     		if(ball[i].dir==1)
     		{
     			ball[i].position++;
     			if(ball[i].position==l)
     			{
     				ball[i].dir=ball[i].dir*(-1);
     			}
     		}
     		else{
     			ball[i].position--;
     			if(ball[i].position==0)
     			{
     				ball[i].dir=ball[i].dir*(-1);
     			}
     		}
     	}
     for(int i=0;i<n-1;i++)
     {
     	for(int j=i+1;j<n;j++)
     	{
     		if(ball[i].position==ball[j].position)
     		{
     			ball[i].dir=ball[i].dir*(-1);
     			ball[j].dir=ball[j].dir*(-1);
     			break;
     		}
     	}
     }
 		}
     for(int i=0;i<n;i++)
     {
     	if(i<n-1)
     	{
     		System.out.print(ball[i].position+" ");
     	}
     	else{
     		System.out.print(ball[i].position);
     	}
     }
     System.out.println();
 	}
 }
 }
 class Ball
 {
 	public int position;
 	public int dir;
 	public Ball(int a,int b)
 	{
 		position=a;
 		dir=b;
 	}
 }
 
 

(6)水果属相排序问题

     package 面向对象类解;
    import java.util.*;
    import java.util.Scanner;
    public class Main1263水果类暗属性排序 {
    	public static void main(String[] args){
    		Scanner sc=new Scanner(System.in);
    		int n=sc.nextInt();
    		while(n-->0){
    			int m=sc.nextInt();
    			Fruit[] f=new Fruit[m];
    			for(int i=0;i<m;i++){
    				f[i]=new Fruit();
    				f[i].name=sc.next();
    				f[i].place=sc.next();
    				f[i].numb=sc.nextInt();
    			}
    			sort(f);
    			String name=f[0].name;
    			String place=f[0].place;
    			int count=0;
    			boolean flag=true;
    			for(int i=0;i<m;i++){
    				if(place.compareTo(f[i].place)!=0){
    					place=f[i].place;
    					name=f[i].name;
    					count=0;
    					flag=true;
    				}
    				if(place.compareTo(f[i].place)==0){
    					if(flag){
    						System.out.println(place);
    						flag=false;
    					}
    					if(name.compareTo(f[i].name)==0){
    						while(i<m&&name.compareTo(f[i].name)==0&&place.compareTo(f[i].place)==0){
    							count+=f[i].numb;
    							i++;
    						}
    						System.out.println("   |----"+name+"("+count+")");
    						if(i<m){
    							name=f[i].name;
    						}
    						i--;
    						count=0;
    					}
    				}
    			}
    			if(n!=0){
    				System.out.println();
    			}
    		}
    	}
    	public static void sort(Fruit[] f){//排序
    		for(int i=0;i<f.length-1;i++){
    			int minIndex=i;
    			for(int j=i+1;j<f.length;j++){
    				if(f[minIndex].place.compareTo(f[j].place)>0){
    					minIndex=j;
    				}else if(f[minIndex].place.compareTo(f[j].place)==0)
    					if(f[minIndex].name.compareTo(f[j].name)>0){
    						minIndex=j;
    					}
    			}
    			if(minIndex!=i){
    				Fruit temp=f[i];
    				f[i]=f[minIndex];
    				f[minIndex]=temp;
    			}
    		}
    	}
    }
    class Fruit{//水果对象,类似于c中的结构体
    	int numb;
    	String name,place;
    	public Fruit(){
    	}
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值