习题-1

/*
 1.考试成绩已经保存在数组scores中,依次为 89,23,64,91,119,52,73,-23
  要求根据通过自定义方法来找出其中前三名,将数组成绩作为参数传入
  要求判断成绩的有效性(0-100),如果成绩无效,则忽略此成绩.
 */
public class TestScore {
	int [] scores ;
	
	public static void main(String[] args) {
		 TestScore t1 = new TestScore();
		 t1.sortScore( new int []{89,23,64,91,119,52,73,-23} );
		 
	}
	//用选择排序对成绩进行从小到大排序
	 void sortScore(int[] marks){
		int temp = 0;
		for(int i=0;i<marks.length-1;i++){
			
			for(int j=i+1;j<marks.length-1;j++){
				if(marks[i]>=0&&marks[i]<=100&&marks[i]<marks[j]){
						temp = marks[i];
						marks[i] = marks[j];
						marks[j] = temp;
				}else{
					continue;  
				}
			}
		}
		
		System.out.print("前三名的成绩是:");
		for(int i=0;i<3;i++){
			System.out.print(marks[i] + " ");
		}	
		
	 }	 
}

/*
 2.用数组来实现, 定义并初始化一个(1--100)保存100个数的数组,从第一个元素开始,依次数(1,2,3 循环往复),每次数到到3的元素淘汰掉.当到达数组
末尾的时候再从头开始,直到最后剩余一个元素,写出算法,并输出最后保留的元素所在的最初的位置.
*/
public class Count3Quit {

	public static void main(String[] args) {
		boolean[] arr = new boolean[100];
		for(int i=0;i<arr.length;i++){
			arr[i] = true;                 //第i个人存在即为true
		}
		
		int leftCount = arr.length;        //圈内的人数
		int countNumber = 0;               //计数器3
		int index = 0;				       //位置
		
		while(leftCount > 1){              //循环条件圈内人数大于1
			if(arr[index] == true){
				countNumber ++;            //开始计数
				if(countNumber == 3){
					countNumber = 0;       //计数清零
					arr[index] = false;    //淘汰数到三的人
					leftCount --;          
				}
			}
			index ++;
			
			if(index == arr.length){
				index = 0;
			}
		}
		for(int i=0;i<arr.length;i++){
			if(arr[i] == true){
				System.out.println(i);
			}
		}
	}

}
/*
 3.用数组来实现对于一个整形数组, 分别通过冒泡排序和 快速排序,实现对于任意一个数组进行由小到大的排列。
 */
 
public class IntSort {
	
	public static void main(String[] args){
		int [] arr = new int [] {2,56,4,7,3,0,1,8};
		bubblesort(arr);
		quickSort(arr, 0, arr.length - 1);
	}
	/*
	 冒泡排序bubble sort(从小到大) :原理是临近的数字两两进行比价,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后从头开始进行比较交换,直到倒数第二位时结束,依次类推。
	 * */
	public static void bubblesort(int[] arr){
		int temp = 0;
		for(int i = 0;i<arr.length-1;i++){   //冒泡趟数
			for(int j=0;j<arr.length-i-1;j++){
				if(arr[j+1]<arr[j]){
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		for(int i= 0;i<arr.length;i++){
			System.out.print("冒泡排序后的顺序: " + arr[i] + " ");
		}
	}
	/*
	 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
	 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
	 * */
	
	public static void quickSort(int arr[],int _left,int _right){
		int left = _left;  
        int right = _right;  
        int temp = 0;  
        if(left <= right){     
            temp = arr[left];    
            while(left != right){   
                while(right > left && arr[right] >= temp)    
                     right --;          
                  arr[left] = arr[right];   
                while(left < right && arr[left] <= temp)  
                     left ++;           
                  arr[right] = arr[left];  
            }  
            arr[right] = temp;               //基准元素归位  
            quickSort(arr,_left,left-1);     //对基准元素左边的元素进行递归排序  
            quickSort(arr, right+1,_right);  //对基准元素右边的进行递归排序  
        }  
        for(int i= 0;i<arr.length;i++){
			System.out.print("快速排序后的顺序: " + arr[i] + " ");
		}
    }  
	
}
/*
 4.判断101-200之间有多少个素数,并输出所有素数。
 */
public class TestPrimeNumber {

	public static void main(String[] args) {
		int count = 0;
		int minNum = 101;
		int maxNum = 200;
		
		while(minNum<=maxNum){	
			if((minNum%2)!=0){
				System.out.println(minNum);
				count++;	
			}
			minNum++;
		}
		System.out.println();
		System.out.println(count);
	}

}

/*
  5.题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
 **/
import java.util.Scanner;

public class TestString {
	public static void main(String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入一行字符: ");
		String str = scan.nextLine();
		test(str);
	}
	public static void test(String str){
		int letter = 0;
		int blank=0;
		int number=0;
		int other=0;
		for(int i=0;i<str.length();i++){
			char ch = str.charAt(i);
			if(ch>'A'&&ch<'Z'||ch>'a'&&ch<'z'){
				letter++;
			}else if(ch==' '){
				blank++;
			}else if(ch>='0'&&ch<='9'){
				number++;
			}else{
				other++;
			}
		}
		System.out.println("英文字母个数:"+letter);
		System.out.println("空格个数:"+blank);
		System.out.println("数字个数:"+number);
		System.out.println("其他字符个数:"+other);
	}
	
}

import java.util.Scanner;

/*
 * 6.题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,
高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,
高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?
*/
public class TestWage {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入当月利润: ");
		double profit = input.nextDouble();
		double bonus = 0;
		if(profit<=100000){
			bonus = profit * 0.1;
		}
		if(profit>100000 && profit<=200000){
			bonus = (profit - 100000) *0.075 + bonus;
		}
		if(profit>200000 && profit<=400000){
			bonus = (profit - 200000) * 0.05 + bonus;
		}
		if(profit>400000 && profit<=600000){
			bonus = (profit - 400000) * 0.03 + bonus; 
		}
		if(profit>600000 && profit<=1000000){
			bonus = (profit - 600000) * 0.015 + bonus; 
		}
		if(profit>=1000000){
			bonus = (profit - 1000000) * 0.001 + bonus; 
		}
		System.out.print("当月奖金是: "+bonus+"RMB");
	}

}
import java.util.Scanner;

/*
 7.分别定义用户类,订单类,产品类,其中订单类至少要具有下订单的行为(入参为一个产品名称),
  产品类中至少有一个成员变量为产品名称,至少有一个方法用来获取产品的名称。
  用户类中持有一个产品类型的成员变量。
  用户类中持有一个订单类型的成员变量。
  
  在我们的用户类中定义main函数,当执行的时候,构造一个用户类的对象,
  并且通过手段可以拿到产品成员变量中的产品名称,并且调用成员变量订单的对象,进行下单。
  最后输出下单成功。 
 */

public class User {
	Product product = new Product();
	Order order = new Order();

	public static void main(String[] args) {
		User member = new User();
		member.product.getName();
		member.order.getOrder();

	}
	
	class Order{
		String orderName;
		void getOrder(/*String productName*/){
			System.out.println("下单成功!");
		}
		
	}
	
	class Product{
		String productName;
		public String getName(){
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入产品名称: ");
			productName = sc.nextLine();
			return productName;
		}
		
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值