曾经做过的40道程序设计课后习题总结(三)

曾经做过的40道程序设计课后习题总结(三)

课后习题目录

1 斐波那契数列
2 判断素数
3 水仙花数
4 分解质因数
5 杨辉三角
6 学习成绩查询
7 求最大公约数与最小公倍数
8 完全平方数
9 统计字母、空格、数字和其它字符个数
10 求主对角线之和
11 完数求解
12 求s=a+aa+aaa+aaaa+aa...a的值
13 高度计算
14 乘法口诀
15 无重复三位数
16 菱形打印
17 利润计算
18 第几天判断
19 从小到大输出数列
20 猴子吃桃问题
21 乒乓球比赛
22 求分数之和
23 求阶乘的和
24 递归求法
25 求不多于5的正整数
26 回文判断
27 星期判断
28 插数入数组
29 取整数的任意位
30 按顺序输出数列
31 位置替换
32 字符串排序
33 贷款器
34 通讯录排序
35 闰年判断
36 二元方程求解
37 密码解译
38 DVD查询
39 电子日历
40 万年历

21 乒乓球比赛

21.1 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
21.2 源程序

public class Compete {
    
    static char[] m = { ‘a‘, ‘b‘, ‘c‘ };
    static char[] n = { ‘x‘, ‘y‘, ‘z‘ };
 
    public static void main(String[] args) {
       for (int i = 0; i < m.length; i++) {
           for (int j = 0; j < n.length; j++) {
              if (m[i] == ‘a‘ && n[j] == ‘x‘) {
                  continue;
              } else if (m[i] == ‘a‘ && n[j] == ‘y‘) {
                  continue;
              } else if ((m[i] == ‘c‘ && n[j] == ‘x‘)
                     || (m[i] == ‘c‘ && n[j] == ‘z‘)) {
                  continue;
              } else if ((m[i] == ‘b‘ && n[j] == ‘z‘)
                     || (m[i] == ‘b‘ && n[j] == ‘y‘)) {
                  continue;
              } else
                  System.out.println(m[i] + " vs " + n[j]);
           }
       }
    }
}

21.3 运行结果:

a vs z
b vs x
c vs y


22 求分数之和

22.1 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

22.2 源程序

import java.text.DecimalFormat;
 
public class FenShu {
    public static void main(String[] args) {
       int x = 2, y = 1, t;
       double sum = 0;
 
       DecimalFormat df = new DecimalFormat("#0.0000");
 
       for (int i = 1; i <= 20; i++) {
           sum += (double) x / y;
           t = y;
           y = x;
           x = y + t;
           System.out.println("第 " + i + " 次相加,和是 " + df.format(sum));
       }
    }
}

22.3 运行结果:

第 1 次相加,和是 2.0000
第 2 次相加,和是 3.5000
第 3 次相加,和是 5.1667
第 4 次相加,和是 6.7667
第 5 次相加,和是 8.3917
第 6 次相加,和是 10.0071
第 7 次相加,和是 11.6261
第 8 次相加,和是 13.2437
第 9 次相加,和是 14.8619
第 10 次相加,和是 16.4799
第 11 次相加,和是 18.0980
第 12 次相加,和是 19.7160
第 13 次相加,和是 21.3340
第 14 次相加,和是 22.9521
第 15 次相加,和是 24.5701
第 16 次相加,和是 26.1881
第 17 次相加,和是 27.8062
第 18 次相加,和是 29.4242
第 19 次相加,和是 31.0422
第 20 次相加,和是 32.6603

23 求阶乘的和

23.1题目:求1+2!+3!+...+20!的和
23.2 源程序

public class JieCheng {
    static long sum = 0;
    static long fac = 0;
 
    public static void main(String[] args) {
       long sum = 0;
       long fac = 1;
       for (int i = 1; i <= 10; i++) {
           fac = fac * i;
           sum += fac;
       }
       System.out.println(sum);
    }
}

23.3 运行结果:

4037913

24 递归求法

24.1题目:利用递归方法求5!。
24.2 源程序

import java.util.Scanner;
 
public class DiGui {
    
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       int n = s.nextInt();
       DiGui tfr = new DiGui();
       System.out.println(tfr.recursion(n));
    }
 
    public long recursion(int n) {
       long value = 0;
       if (n == 1 || n == 0) {
           value = 1;
       } else if (n > 1) {
           value = n * recursion(n - 1);
       }
       return value;
    }
}

24.3 运行结果:

12
479001600

24.4 源程序揭秘

递归公式:fn = (fn-1)+(fn-2)。

25 求不多于5的正整数

25.1题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

25.2 源程序

import java.util.Scanner;
 
public class ZhZhShu {
 
    public static void main(String[] args) {
 
       ZhZhShu tn = new ZhZhShu();
       Scanner s = new Scanner(System.in);
       long a = s.nextLong();
       if (a < 0 || a > 100000) {
           System.out.println("Error Input, please run this program Again");
           System.exit(0);
       }
 
       if (a >= 0 && a <= 9) {
           System.out.println(a + "是一位数");
           System.out.println("按逆序输出是" + ‘\n‘ + a);
       } else if (a >= 10 && a <= 99) {
           System.out.println(a + "是二位数");
           System.out.println("按逆序输出是");
           tn.converse(a);
       } else if (a >= 100 && a <= 999) {
           System.out.println(a + "是三位数");
           System.out.println("按逆序输出是");
           tn.converse(a);
       } else if (a >= 1000 && a <= 9999) {
           System.out.println(a + "是四位数");
           System.out.println("按逆序输出是");
           tn.converse(a);
       } else if (a >= 10000 && a <= 99999) {
           System.out.println(a + "是五位数");
           System.out.println("按逆序输出是");
           tn.converse(a);
       }
    }
 
    public void converse(long l) {
       String s = Long.toString(l);
       char[] ch = s.toCharArray();
       for (int i = ch.length - 1; i >= 0; i--) {
           System.out.print(ch[i]);
 
       }
    }
}

25.3 运行结果:

67
67是二位数
按逆序输出是
76

26 回文判断

26.1 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
26.2 源程序

import java.util.Scanner;
 
public class HuiWen {
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       System.out.print("请输入一个正整数:");
       long a = s.nextLong();
       String ss = Long.toString(a);
       char[] ch = ss.toCharArray();
       boolean is = true;
       int j = ch.length;
       for (int i = 0; i < j / 2; i++) {
           if (ch[i] != ch[j - i - 1]) {
              is = false;
           }
       }
       if (is == true) {
           System.out.println("这是一个回文数");
       } else {
           System.out.println("这不是一个回文数");
       }
    }
}

26.3 运行结果:

请输入一个正整数:12345654321
这是一个回文数

27 星期判断

27.1题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
27.2 源程序

import java.util.Scanner;
 
public class XingQi {
    Scanner s = new Scanner(System.in);
 
    public static void main(String[] args) {
       XingQi tw = new XingQi();
       char ch = tw.getChar();
       switch (ch) {
       case ‘M‘:
           System.out.println("Monday");
           break;
       case ‘W‘:
           System.out.println("Wednesday");
           break;
       case ‘F‘:
           System.out.println("Friday");
           break;
       case ‘T‘: {
           System.out.println("please input the second letter!");
           char ch2 = tw.getChar();
           if (ch2 == ‘U‘) {
              System.out.println("Tuesday");
           } else if (ch2 == ‘H‘) {
              System.out.println("Thursday");
           }
 
       }
           ;
           break;
       case ‘S‘: {
           System.out.println("please input the scecond letter!");
           char ch2 = tw.getChar();
           if (ch2 == ‘U‘) {
              System.out.println("Sunday");
           } else if (ch2 == ‘A‘) {
              System.out.println("Saturday");
           }
 
       }
           ;
           break;
       }
    }
 
    public char getChar() {
       String str = s.nextLine();
       char ch = str.charAt(0);
       if (ch < ‘A‘ || ch > ‘Z‘) {
           System.out.println("Input error, please input a capital letter");
           getChar();
       }
       return ch;
    }
}

27.3 运行结果:

Monday
Monday

28 插数入数组

28.1题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

28.2 源程序

import java.util.Scanner;
 
public class ChaRu {
    public static void main(String[] args) {
       int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7 };
       int[] b = new int[a.length + 1];
       int t1 = 0, t2 = 0;
       int i = 0;
       Scanner s = new Scanner(System.in);
       int num = s.nextInt();
 
       if (num >= a[a.length - 1]) {
           b[b.length - 1] = num;
           for (i = 0; i < a.length; i++) {
              b[i] = a[i];
           }
       } else {
           for (i = 0; i < a.length; i++) {
              if (num >= a[i]) {
                  b[i] = a[i];
              } else {
                  b[i] = num;
                  break;
              }
           }
           for (int j = i + 1; j < b.length; j++) {
              b[j] = a[j - 1];
           }
       }
 
       for (i = 0; i < b.length; i++) {
           System.out.print(b[i] + " ");
       }
    }
}

28.3 运行结果:

3
1 2 3 3 4 5 6 7

28.4 源程序揭秘

定义两个数组a,b,一个a的长度比另一个b大1,a看做是已经排好序的。接下来的过程是

如果num 比最后一个数大,把num赋值给数组b的最后一个数再按顺序把a 的每个元素赋给b

否则(num 不比a 的最后一个数大),如果a 的元素比num 小,则将这些元素按顺序赋给b,将num 赋给比num大的b数组的元素,跳出第一个for循环。

定义一个循环控制变量,从num传给数组后num的下标值加一开始;直到b的结尾,将剩下的a 的值赋给b,赋值的过程是b[j] = a[i-1]。

29 取整数的任意位

29.1题目:取一个整数a从右端开始的4~7位。
29.2 源程序

import java.util.Scanner;
 
public class QuWei {
 
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       boolean is = true;
       System.out.print("请输入一个7位以上的正整数:");
       long a = s.nextLong();
       String ss = Long.toString(a);
       char[] ch = ss.toCharArray();
       int j = ch.length;
       if (j < 7) {
           System.out.println("输入错误!");
       } else {
           System.out.println("截取从右端开始的4~7位是:" + ch[j - 7] + ch[j - 6]
                  + ch[j - 5] + ch[j - 4]);
       }
    }
}

29.3 运行结果:

请输入一个7位以上的正整数:123456789
截取从右端开始的4~7位是:3456

29.4 源程序揭秘

先使a右移4位;设置一个低4位全为1,其余全为0的数。可用~(~0 < <4);将上面二者进行&运算。

30 按顺序输出数列

30.1题目:输入3个数a,b,c,按大小顺序输出

30.2 源程序

import java.util.Scanner;
 
public class ShunXu {
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       int a = s.nextInt();
       int b = s.nextInt();
       int c = s.nextInt();
 
       if (a < b) {
           int t = a;
           a = b;
           b = t;
       }
 
       if (a < c) {
           int t = a;
           a = c;
           c = t;
       }
 
       if (b < c) {
           int t = b;
           b = c;
           c = t;
       }
 
       System.out.println("从大到小的顺序输出:");
       System.out.println(a + " " + b + " " + c);
    }
}

30.3 运行结果:

34 23 89
从大到小的顺序输出:
89 34 23

由于博客字数限制,40道程序设计课后习题总结将分4篇帖子进行总结,后面3篇帖子后面会一一贴出,或者可以在自己的博客下载已经总结完的全文 http://my.oschina.net/mkh/blog/340689,里面有全面详细的总结。

原创文章欢迎转载,转载请注明出处!

时间: 2024-10-13 03:06:16

曾经做过的40道程序设计课后习题总结(三)的相关文章

曾经做过的40道程序设计课后习题总结(一)

曾经做过的40道程序设计课后习题总结(一) 课后习题目录 1 斐波那契数列2 判断素数3 水仙花数4 分解质因数5 杨辉三角6 学习成绩查询7 求最大公约数与最小公倍数8 完全平方数9 统计字母.空格.数字和其它字符个数10 求主对角线之和11 完数求解12 求s=a+aa+aaa+aaaa+aa...a的值13 高度计算14 乘法口诀15 无重复三位数16 菱形打印17 利润计算18 第几天判断19 从小到大输出数列20 猴子吃桃问题21 乒乓球比赛22 求分数之和23 求阶乘的和24 递归求

JAVA语言程序设计课后习题----第三单元解析(仅供参考)

1 本题水题,记住要知道输入格式即可 1 import java.util.Scanner; 2 3 public class test { 4 public static void main(String[] args) { 5 // 从键盘中读取数据 6 Scanner input = new Scanner(System.in); 7 int a = input.nextInt(); 8 if(a%2==0) 9 System.out.println("这个数是偶数"); 10

JAVA语言程序设计课后习题----第四单元解析(仅供参考)

1 本题水题,主要理解题目的意思即可,访问方法和修改方法可以通过快捷方式alt+insert选中你需要的成员变量即可 1 public class Person { 2 public String name; 3 public int age; 4 public static void main(String[] args) { 5 // new一个对象,对象名是person 6 Person person =new Person(); 7 // 给name变量赋值 8 person.setNa

算法竞赛入门经典(刘汝佳)课后习题前三章答案

本文转载: 第一章习题1-1#include <stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return 0;} 习题1-2#include <stdio.h>int main(){int f;double c;scanf("%d",&

Java数据结构和算法 第二版 课后习题第三章

习题1.bubbleSort.java程序(清单3.1)和BubbleSort专题applet中,in索引变量都是从左到右移动的,直到找到最大数据项并把它移动到右边的out变量外.修改bubbleSort()方法,使它成为双向移动的.这样,in索引先像以前一样,将最大的数据项从左移到右,当它到达out变量位置时,它掉头并把最小的数据项从右移到左.需要两个外部索引变量,一个在右边(以前的out变量),另一个在左边. public static void bubbleSort(int nElem,i

JAVA语言程序设计基础课后习题第三章

//exercise 3.1 package thirdchapterexercise1; import java.util.Scanner; public class first { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); System.out.print("Enter a,b,c:"); double

计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图

计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图 (一)题面 腾讯手机地图的定位功能用到了用户手机的多种信号,这其中有的信号的作用范围近,有的信号作用的范围则远一些.有的信号相对于用户在不同的方位强度是不同的,有的则是在任何一个方向上信号强度都一致的. 已知用户面向北方拿着自己的手机,在不同方位的各种信号覆盖区域可以被抽象成以用户为圆心的一系列扇形.已知每个扇形的半径 r,和每个扇形的两条边相对于正东方向的夹角度数.每个信号覆盖区域抽象出的扇形都可以通过从第一条边逆时针旋转到第二条边画出.

问题 1018: C语言程序设计教程(第三版)课后习题6.8

/******************************************************************** @file Main.cpp @date 2017-05-12 @author Zoro_Tiger @brief 问题 1018: C语言程序设计教程(第三版)课后习题6.8 http://www.dotcpp.com/oj/problem1018.html *************************************************

问题 1041: C语言程序设计教程(第三版)课后习题9.8

/******************************************************************** @file Main.cpp @date 2017-05-28 22:02:55 @author Zoro_Tiger @brief 问题 1041: C语言程序设计教程(第三版)课后习题9.8 http://www.dotcpp.com/oj/problem1041.html ****************************************