《java练习题》习题集四

【程序31】
题目:取一个整数a从右端开始的4~7位。

import java.util.Scanner;

/**
 * 【程序31】
 * 题目:取一个整数a从右端开始的4~7位。
 */
public class Subject31 {
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        System.out.println("请输入一个操作8位的整数");
        String num = scanner.next();
        intercept(num);
    }

    /**
     * 截取num
     * @param num
     */
    private static void intercept(String num) {
        char[] arr = num.toCharArray();
        int j=0;
        System.out.print("截取结果为:");
        for(int i = arr.length-1 ; i >= 0;i--){
            j++;
            if(j >= 4 && j<=7){
                System.out.print(arr[i]+" ");
            }
        }
    }
}

运行结果:

 

【程序32】
题目:打印出杨辉三角形(要求打印出10行如下图) ,完美杨辉三角。

import java.util.ArrayList;
import java.util.List;

/**
 * 【程序32】
 * 题目:打印出杨辉三角形(要求打印出10行如下图)
 */
public class Subject32 {

    private static int num_1 = 10;
    private static List<int[]> list = new ArrayList<>();

    public static void main(String[] args) {
        System.out.println("杨辉三角形打印如下:");
        yangHuiTriangle(num_1);
        int maxLength = (list.get(list.size()-1)[num_1/2]+"").length();
        boolean flag = isParity(maxLength);
        for (int i = 0 ; i < list.size(); i++) {
            int[] arr = list.get(i);
            printSpace(arr,maxLength);
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[j]);
                int tmp = (arr[j]+"").length();
                if(flag){
                    for (int k = 0; k < maxLength+2 - tmp; k++) {
                        System.out.print(" ");
                    }
                }else{
                    for (int k = 0; k < maxLength+1 - tmp; k++) {
                        System.out.print(" ");
                    }
                }

            }
            System.out.println();
        }
    }

    /**
     * 判断maxLength是奇数还是偶数
     * @param maxLength
     * @return
     */
    private static boolean isParity(int maxLength) {
        if(maxLength%2 == 1){
            return false;
        }else {
            return true;
        }
    }

    /**
     * 获取杨辉三角数据
     * @param num
     * @return
     */
    private static int[] yangHuiTriangle(int num) {
        if(num == 1){
            int[] arr = new int[]{1};
            list.add(arr);
            return arr;
        }else{
            int[] arrPro = yangHuiTriangle(num-1);
            int[] arrAft = new int[num];
            for (int i = 0; i < arrAft.length ; i++) {
                if(i == 0){
                    arrAft[i] = 0+arrPro[i];
                }else if( i== arrAft.length-1){
                    arrAft[i] = arrPro[i-1]+0;
                }else{
                    arrAft[i] = arrPro[i-1] + arrPro[i];
                }
            }
            list.add(arrAft);
            return arrAft;
        }
    }

    /**
     * 空格打印
     * @param arr
     */
    private static void printSpace(int[] arr,int maxLength) {
        for (int i = 0; i < num_1 - arr.length ; i++) {
            double loopNum = Math.ceil((maxLength+1)/2.0);
            for (int j = 0; j < loopNum; j++) {
                System.out.print(" ");
            }
        }
    }
}

运行结果:

【程序33】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

/**
 * 【程序33】
 * 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
 */
public class Subject33 {

    public static void main(String[] args) {
        int[] arr = new int[]{44,56,89,32,11,78,55,82,02,68,44,27};
        printArray(arr);
        deal(arr);
    }

    private static void deal(int[] arr) {
        int maxNum = arr[0];    //最大数
        int minNum = arr[0];    //最小数
        int maxPosition = 0;    //最大数在数组的位置。
        int minPosition = 0;    //最小数在数组的位置。
        for (int i = 1; i <  arr.length; i++) {
            if(arr[i] > maxNum){
                maxNum = arr[i];
                maxPosition = i;
            }
            if(arr[i] < minNum){
                minNum = arr[i];
                minPosition = i;
            }
        }

        /*********重组数组(最大的与第一个元素交换,最小的与最后一个元素)************/
        int tmp = 0;
        tmp = arr[0];
        arr[0] = arr[maxPosition];
        arr[maxPosition] = tmp;

        tmp = arr[arr.length-1];
        arr[arr.length-1] = arr[minPosition];
        arr[minPosition] = tmp;

        /*********打印数组***********/
        printArray(arr);
    }

    /**
     * 打印数组
     * @param arr
     */
    private static void printArray(int[] arr) {
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}

运行结果:

【程序34】
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

/**
 * 【程序34】
 * 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
 */
public class Subject34 {

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        /**********************打印数组*************************/
        printArray(arr);
        int m = 6;   //偏移量
        deviation(arr,m);
    }

    /**
     * 数组arr偏移m后的结果
     * @param arr
     * @param m
     */
    private static void deviation(int[] arr,int m) {
        int[] newArr = new int[m];
        int count = m-1;
        /*******************将最后m为数保存到新数组中********************/
        for (int i = arr.length-1; i >= arr.length-m ; i--) {
            newArr[count--] = arr[i];
        }

        /********************将数组中的数据往后移动m位***************************/
        for (int i =  arr.length-1; i >= m; i--) {
            arr[i] = arr[i-m];
        }

        /**********************数组前面的数据补充完整*************************/
        for (int i = 0; i < newArr.length; i++) {
            arr[i] = newArr[i];
        }

        /**********************打印数组*************************/
        printArray(arr);
    }

    /**
     * 打印数组
     * @param arr
     */
    private static void printArray(int[] arr) {
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}

运行结果:

【程序35】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 【程序35】
 * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
 */
public class Subject35 {
    public static void main(String[] args) {
        System.out.println("请输入人数:");
        Scanner scanner = new Scanner(System.in);
        int n= scanner.nextInt();
        numberGame(n);
    }

    /**
     * 数字游戏
     * @param n
     */
    private static void numberGame(int n) {
        List<Integer> list = new ArrayList<>();
        /****************给50个人编号******************/
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }
        endGameByNum(list,1);
    }

    /**
     * 获取最后留下的人
     * @param list
     * @param ident
     */
    private static void endGameByNum(List<Integer> list,int ident) {
        List<Integer> listTmp = new ArrayList<>();

        if(list.size() >=  3 ) {
            for (int i = 0; i < list.size(); i++) {
                if ((i+ident)%3 != 0) {
                    listTmp.add(list.get(i));
                }
            }
            endGameByNum(listTmp,list.size()%3+1);
        }else{
            for (int i = 0; i < list.size(); i++) {
                System.out.println("最后留下的人为"+list.get(i)+"号选手!");
            }
        }
    }
}

运行结果:

 

【程序36】
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

import java.util.Scanner;

/**
 * 【程序36】
 * 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
 */
public class Subject36 {

    public static void main(String[] args) {
        System.out.println("请输入一个字符串:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        stringLength(str);
    }

    /**
     * 输出字符串长度
     * @param str
     */
    private static void stringLength(String str) {
        char[] arr = str.toCharArray();
        System.out.println("字符串长度:"+ arr.length);
    }
}

 

运行结果:

 

 

【程序37】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n

import java.util.Scanner;

/**
 * 【程序37】
 * 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n
 */
public class Subject37 {

    private static double sum = 0;    //求和

    private static String str = "";   //拼接字符串

    public static void main(String[] args) {
        System.out.println("请输入一个正整数:");
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        specialDeal(num);
        System.out.print(str.substring(0,str.length()-2)+"的和为:");
        System.out.println(sum);
    }

    /**
     * 输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n
     * @param num
     */
    private static void specialDeal(int num) {
        sum = sum+ 1.0/num;
        if(num > 2){
            specialDeal(num-2);
        }
        str = str+"1/"+num+" + ";
    }
}

运行结果:

【程序38】
题目:字符串排序。

/**
 * 【程序38】
 * 题目:字符串排序。
 */
public class Subject38 {
    public static void main(String[] args) {
        String[] arrStr = new String[]{"asd","bbb","dddd","add","eddd","ccdd","caaa","adds","cvf","dass"};
        System.out.print("初始数组:");
        printStrinArray(arrStr);
        stringOrder(arrStr);
    }

    /**
     * 字符串数组排序
     * @param arrStr
     */
    private static void stringOrder(String[] arrStr) {
        for (int i = 0; i <arrStr.length ; i++) {
            for (int j = i+1; j < arrStr.length; j++) {
                String tmp = "";
                if(arrStr[i].compareTo(arrStr[j]) > 0){
                    tmp = arrStr[i];
                    arrStr[i] =  arrStr[j];
                    arrStr[j] = tmp;
                }
            }
        }
        System.out.print("排序后数组:");
        printStrinArray(arrStr);
    }

    /**
     * 字符串数组打印
     * @param arrStr
     */
    private static void printStrinArray(String[] arrStr) {
        for (int i = 0; i < arrStr.length; i++) {
            System.out.print(arrStr[i]+" ");
        }
        System.out.println();
    }
}

运行结果:

【程序39】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

/**
 * 【程序39】
 * 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
* 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
* 问海滩上原来最少有多少个桃子?
*/ public class Subject39 { private static int count = 0; //分桃次数 private static int tmp = 0; //桃子数量 public static void main(String[] args) { averagePeachTot(); } /** * 循环获取桃子总数 */ private static void averagePeachTot() { int frequency = 4; while(true){ if(count == 6){ System.out.println(tmp); break; } count =0; averagePeach(frequency); frequency+=4; } } /** * 平分桃子 */ private static void averagePeach(int num) { count++; if(num%4 == 0 && count<=5){ tmp = num + 1 + num/4; averagePeach( tmp); } } }

运行结果:

【程序40】
题目:809*??=800*??+9*??+1
其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果

/**
 * 【程序40】
 * 题目:809*??=800*??+9*??+1    改成 809*??=800*??+9*??
 * 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果, 题目错误
 */
public class Subject40 {
    public static void main(String[] args) {
        mathematicsFormula();
    }

    /**
     * 数学公式
     */
    private static void mathematicsFormula() {
        boolean flag = false;
        for (int i = 10; i < 100 ; i++) {
            if( 8*i < 100 && 9*i >100 && 809*i == 800*i+9*i){
                flag = true;
                System.out.println("??=" + i);
                System.out.println("809*?? = " + 809*i);
            }
        }
        if(!flag){
            System.out.println("为找到合适的数");
        }
    }
}

运行结果:

 

参考:https://blog.csdn.net/zzzzzzzhu/article/details/82355001

转载于:https://www.cnblogs.com/jssj/p/11568959.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 《Java程序设计习题集》是同作者所编写的清华大学教材《Java程序设计》相配套的习题集习题集内容覆盖面广,包括:Java言的基本常识、基本语法、面向对象的基本概念、数组、字符串、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体民图形学程序设计以及数据库程序设计等。全书共分为习题、参考答案和测试要点与解题说明3个部分。习题包括判断正误、填空题、选择题、简答题、编程题和趣味题等6种题型,并按难易程序分为3 个等级,采用星号注明。本习题集收集了Java程序编写常见问题,并以习题形式总结和归纳Java程序设计知识要点,同时兼顾了SCJP(Sun公司 Java程序员认证考试),从而降低学习难度,减少编写程序出现错误的枘地,也便于掌握各个知识要点或测试对Java程序设计的掌握熟练程度。这些特点有利于初学者在学习过程中少走弯路。对知识点的总结以及内容的全面性也使得《Java程序设计习题集》具有一定的手册特性,非常适合复习,同时也方便教师出题,使得各章节的试题容易在试卷中分布均匀合理。在本习题集中的编程题和趣味题还有可能采用其他计算机语言实现,从而本习题集也有可能成为学习其他计算机语言的实践素材。 编辑推荐 内容全面:习题全面覆盖了Java程序设计(J2SE)的基本知识要点和重要知识要点。以习题的形式对JaVa程序设计方法和常见问题进行了总结与归纳,从而方便复习。   实用性:《Java程序设计习题集》每章都含有一些趣味题,营造了一种轻松而快乐的学习氛围,努力培养和提高学生的学习乐趣,同时也使学生容易产生学习成就感。   趣味性:习题基本上覆盖了程序员在编写Java程序时经常出现的问题Java程序设计知识要点,各习题也列出其测试要点,从而方便教师从中挑选或改编考题以及方便学生进行实战模拟练习或测试,同时也可以为SCJP考试作准备。   简洁性:每道习题者晖力求典型而简洁,这样既方便初学者,也有利于提高学习效率,在较短的时间内测试并领会较多的知识要点。 作者简介 雍俊海1991年到2000年就读于清华大学计算机科学与技术系,获学士。硕士和博士学,被评为清华大学优秀博士毕业生,博士论文被评为全国优秀博士论文。从2000年3月到2000年6月在香港科技大学计算机系担任访问研究员,从2000年11月到2002年9月在美国肯塔基大学计算机系做博士后,现为清华大学软件学院教师。参与或负责多个国家自然科学基金项目。国家863项目。973项目和美国自然科学基金项目。在2003-2004学年度在清华大学开设了"Java程序设计"课程,获得学生一致好评。根据清华大学2003-2004学年秋季学期教学评估结果,教学成绩在全校名列前茅,在清华大学软件学院所有参评教师中取得教学成绩第一名,在所有讲授Jaya课程的清华大学参评教师中获得教学成绩第一名。因此还获得了清华大学软件学院教学工作优秀奖、大学生研究训练计划(SRT)优秀指导教师一等奖。 目录 第一部分习题 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第二部分 参考答案 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第三部分 测试要点与解题说明 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值