上机练习题(上)

入门级
1、写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。(取近似值)例输入5.5输出6

import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    
    
	public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
    
    
        	double d = scan.nextDouble();
        	int dint = (int)d;
        	if((d-dint)>=0.5 && (d-dint)<1)
        		dint++;
        	System.out.println(dint);
        }
    }
}

2、输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内 例输入5输出2

import java.util.*;
public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int count = 0;
        while(n>0){
    
    
            if((n&1)>0){
    
    
                count++;
            }
            n=n>>1;
        }
        System.out.println(count);
    }
}

3、输入整型数组和排序标识,对其元素按照升序或降序进行排序。
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输出描述:
输出排好序的数字

import java.util.*;
public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
    
    
            int n=in.nextInt();
            int[] a=new int[n];
            for(int i=0;i<n;i++){
    
    
                a[i]=in.nextInt();
            }
            Arrays.sort(a);
            int b=in.nextInt();
            if(b==0){
    
    
                for(int i=0;i<a.length;i++){
    
    
                    System.out.print(a[i]+" ");
                }
            }
            if(b==1){
    
    
                for(int i=a.length-1;i>=0;i--){
    
    
                    System.out.print(a[i]+" ");
                }
            }
            System.out.println();
        }
    }
}

简单级
1、输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

import java.util.*;
public class Main {
    
    
    public static void main(String[] args){
    
    
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        StringBuffer sb = new StringBuffer(str);
        sb.reverse();
        System.out.println(sb.toString());
    }
}

2、接收一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

import java.util.Scanner;
public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
    
    
            String s=sc.nextLine();
            for(int i=s.length()-1;i>=0;i--){
    
    
                System.out.print(s.charAt(i));
            }
        }
    }
}

3、有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是 5 瓶,方法如下:先用 9 个空瓶子换3瓶汽水,喝掉 3 瓶满的,喝完以后 4 个空瓶子,用 3 个再换一瓶,喝掉这瓶满的,这时候剩 2 个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用 3 个空瓶子换一瓶满的还给老板。如果小张手上有 n 个空汽水瓶,最多可以换多少瓶汽水喝?

// f(n)=n/3 + f(n%3+n/3),貌似递归次数更少。
// n/3是能直接换到的汽水数,n%3+n/3是新换到的汽水瓶子+上次换剩下的
import java.util.*;
public class Main {
    
    
	public static int f(int n) {
    
    
		if (n == 1)
			return 0;
		if (n == 2)
			return 1;
		return n / 3 + f(n % 3 + n / 3);
	}
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
    
    
			int num = sc.nextInt();
			if (num != 0) {
    
    
				System.out.println(f(num));
			}
		}
		sc.close();
	}
}

4、对字符串中的所有单词进行倒排。
①构成单词的字符只有26个大写或小写英文字母;
②非构成单词的字符均视为单词间隔符;
③要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
④每个单词最长20个字母;

import java.util.Scanner;
public class Main
{
    
    
    public static void main(String[] args)
    {
    
    
        Scanner sc = new Scanner(System.in);
        String[] sp = sc.nextLine().split("[^a-zA-Z]+");
        StringBuilder sb = new StringBuilder();
        for (int i = sp.length - 1; i >= 0; i--)
            sb.append(sp[i] + " ");
        System.out.println(sb.toString().trim());
        sc.close();
    }
}	

5、有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?

import java.util.Scanner;
public class Main{
    
    
    public static void main(String[] args){
    
    
    	Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
    
    
        	int input = sc.nextInt();
        	System.out.println(Main.getNumber(input));  	
        }
    }
    //通过列举出每月的有生育能力兔子的数目,没有生能力的兔子的说目,一月大的兔子的数目和二月大的兔子的数目可知
    //
    public static int getNumber(int mounth){
    
    
    	if(mounth == 1 || mounth == 2){
    
    
    		return 1;
    	}
    	int tempold = 1;
    	int tempyoung = 1;
    	int mounth1 = 1;
    	int mounth2 = 0;
    	for(int j = 4; j <= mounth; j++){
    
    
    		//第一步,第二个月的变成了有生育能力的兔子
    		tempold += mounth2;
    		//第二步,一个月大的兔子变成了两个月大的兔子
    		mounth2 = mounth1;
    		//第三步,有生育能力的兔子生出了一个月大的小兔子
    		mounth1 = tempold;
    		//当月小兔子的个数
    		tempyoung = mounth1 + mounth2;  		
    	}
    	return tempold + tempyoung;
    }
}

6、第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。杨辉三角
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。

import java.util.*;
public class Main{
    
    
    public static void main(String[] args){
    
    
 		Scanner in = new Scanner(System.in);
        while(in.hasNext()){
    
    
            int n = in.nextInt();
            if(n<=2)
                System.out.println(-1);
            else if(n%2==1){
    
    
                System.out.println(2);
            }else{
    
    
                if(n%4==0)
                	System.out.println(3);
                else
                    System.out.println(4);
            }
        }
        in.close();
    }
}

7、给定一个字符串描述的算术表达式,计算出结果值。
输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。
数据范围:运算过程中和最终结果均满足 ,即只进行整型运算,确保输入的表达式合法

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.Scanner;
public class Main
{
    
    
    public static void main(String args[]) {
    
    
        String enter;
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()){
    
    
            enter = in.nextLine();
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("js");
            try {
    
    
                Object result = engine.eval(enter);
                System.out.println(result);
            } catch (ScriptException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

8、完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
输入n,请输出n以内(含n)完全数的个数。

import java.util.Scanner;
public class Main {
    
    
	public static void main(String[] args) {
    
    
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
    
    
			int N = in.nextInt();
			int count = 0;
			for(int i=1;i<=N;i++){
    
    
				int sum=0;
				for(int j=1;j<i;j++){
    
    
					if(i%j==0){
    
    
						sum+=j;
					}
				}
				if(sum==i){
    
    
					count++;
				}
			}
			System.out.println(count);
		}
	}
}

9、把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

import java.util.*;
public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
    
    
            int m = sc.nextInt();
            int n = sc.nextInt();
            if(m<1 || n>10){
    
    
                System.out.println(-1);
            }else{
    
    
                System.out.println(shareCount(m,n));
            }
        }
    }
    public static int shareCount(int m, int n){
    
    
        if(m<0){
    
    
            return 0;
        }
        if(m==1 || n==1){
    
    
            return 1;
        }
        return shareCount(m, n-1)+shareCount(m-n,n);
    }
}

10、输入一个正整数,计算它在二进制下的1的个数。注意多组输入输出!!!!!!

import java.util.Scanner;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in=new Scanner(System.in);
        while (in.hasNext()) {
    
    
            int a=in.nextInt();
            int count=0;
            while (a != 0) {
    
    
                a&=a-1;
                count++;
            }
            System.out.println(count);
        }
    }
}

11、公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?现要求你打印出所有花一百元买一百只鸡的方式。

import java.util.*;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
    
    
        	int num = sc.nextInt();
        	int n1 = 0; // 鸡翁个数
        	int n2 = 0; // 鸡母个数
        	int n3 = 3; // 鸡雏个数
        	for(n1 = 0; n1 < 20; n1++){
    
    
        		for(n2 = 0; n2 < 33; n2++){
    
    
        			for(n3 = 0; n3 < 100; n3 = n3 + 3){
    
    
        				if(n1 + n2 + n3 == 100 && 5*n1 + 3*n2 + n3/3 == 100){
    
    
        					System.out.println(n1 + " " + n2 +  " " + n3);
        				}
        			}
        		}
        	}		        	
        }
        sc.close();
    }
}

12、根据输入的日期,计算是这一年的第几天。保证年份为4位数且日期合法。

import java.util.*;
import java.io.*;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
    
    
            int year = scanner.nextInt();
            int month = scanner.nextInt();
            int day = scanner.nextInt();
            scanner.nextLine();
            calculateDate(year, month, day);
        }
        scanner.close();
    }
    public static void calculateDate(int year, int month, int day) {
    
    
        int sumDay = 0;
        // 正常月份(index)对应的天数;
        int[] normMonthDay = {
    
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        // 判断是不是闰年,如果是闰年,false;
        boolean isNormYear = year % 4 == 0 ? false : true;
        // 累加除了最后一个月份的天数;
        for (int i = 1; i < month; i++) {
    
    
            // 如果是闰年2月,那么闰年2月应为为29天
            if (i == 2 && !isNormYear) {
    
    
                sumDay += 29;
                continue;
            }
            sumDay += normMonthDay[i];
        }
        // 加上最后一个月份的天数;
        sumDay += day;
        // 打印答案
        System.out.println(sumDay);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43980936/article/details/121616418
今日推荐