前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >曾经做过的40道程序设计课后习题总结(三)

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

作者头像
闵开慧
发布2018-04-02 13:01:44
1.1K0
发布2018-04-02 13:01:44
举报
文章被收录于专栏:闵开慧闵开慧

曾经做过的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 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
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 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
第 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 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
4037913

24 递归求法

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

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
12
479001600

24.4 源程序揭秘

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

25 求不多于5的正整数

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

25.2 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
67
67是二位数
按逆序输出是
76

26 回文判断

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

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
请输入一个正整数:12345654321
这是一个回文数

27 星期判断

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

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
Monday
Monday

28 插数入数组

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

28.2 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
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 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
请输入一个7位以上的正整数:123456789
截取从右端开始的4~7位是:3456

29.4 源程序揭秘

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

30 按顺序输出数列

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

30.2 源程序

代码语言:javascript
复制
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 运行结果:

代码语言:javascript
复制
34 23 89
从大到小的顺序输出:
89 34 23

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档