Java学习笔记 - 1

一、输入正整数n、实数x,求S。
在这里插入图片描述

题解:

package class_1;

import java.util.Scanner;

public class problem_1 {
    public static void main( String args[] ) {
        Scanner sca = new Scanner(System.in);
        int n;
        double x,s = 0.0;
        n = sca.nextInt();
        x = sca.nextDouble();
        for(int i = 1; i <= n; ++i) {
            s += (i%2 == 1?1:-1) * (_pow(x,i) + (double)i) / (_pow(x,i-2) - ((double)i+1));
        }
        System.out.print(s);
    }

    static double _pow(double x, int y) {
        double ans = 1;
        if(x == 0.0 && y > 0) return 0.0;
        if(y < 0) {
            y = -y;
            x = 1.0 / x;
        }
        while(true) {
            if(y % 2 == 1) ans *= x;
            y >>= 1;
            if(y == 0) return ans;
            x *= x;
        }
    }
}

二、输入正整数N,显示出下列形状的杨辉三角形。(N<=20,注:一定要是下列形状)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

1 … 1

从第三行开始显示
题解:

package class_1;
import java.util.Scanner;
public class problem_2 {
    
    public static void main( String args[] ) {
        Scanner sca = new Scanner(System.in);
        int n;
        int a[][] = new int[25][25];
        n = sca.nextInt();
        for(int i = 1; i <= n; ++i) {
            a[i][1] = 1; a[i][i] = 1;
            for(int j = 2; j <= i/2; ++j) {
                a[i][j] = a[i-1][j-1] + a[i-1][j];
                a[i][i-j+1] = a[i][j];
            }
            if(i % 2 == 1 && i > 2) {
                a[i][i/2+1] = a[i-1][i/2] + a[i-1][i/2+1];
            }
            if(i >= 3) {
                for(int j = 1; j <= i; ++j) {
                    System.out.print(a[i][j]);
                    if(a[i][j] >= 100000) System.out.print(" ");
                    else if(a[i][j] >= 10000) System.out.print("  ");
                    else if(a[i][j] >= 1000) System.out.print("   ");
                    else if(a[i][j] >= 100) System.out.print("    ");
                    else if(a[i][j] >= 10) System.out.print("     ");
                    else if(a[i][j] >= 1) System.out.print("      ");
                }
                System.out.print('\n');
            }
        }
    }
}

三、将3.8题改为:输入一系列整数,统计出其中(1)正整数、负整数的个数;(2)正整数的最大值、最小值;(3)负整数的最大值、最小值;(4)所有数的均方差S,S=(Xi-△x)2,其中△x为平均数,Xi为第i个整数;(5)如输入的是0,则停止输入,然后显示出上述求解的结果。
题解:

package class_1;

import java.util.Scanner;

public class problem_3 {
    public static void main( String args[] ) {
        Scanner sca = new Scanner(System.in);
        int INF = 0x3f3f3f;
        int a[] = new int[1005];
        int pos_n = 0, neg_n = 0;
        int pos_ma = -INF, pos_mi = INF;
        int neg_ma = -INF, neg_mi = INF;
        int delt_x = 0, s = 0;
        int i = 0, temp = 0;
        while(true) {
            temp = sca.nextInt();
            if(temp == 0) break;
            a[++i] = temp;
            delt_x += a[i];
            if(a[i] > 0) {
                ++pos_n;
                if(a[i] > pos_ma) pos_ma = a[i];
                if(a[i] < pos_mi) pos_mi = a[i];
            }
            else {
                ++neg_n;
                if(a[i] > neg_ma) neg_ma = a[i];
                if(a[i] < neg_mi) neg_mi = a[i];
            }
        }
        delt_x /= i;
        while(i > 0) {
            s = (a[i] - delt_x) * (a[i] - delt_x);
            --i; 
        }
        System.out.println("number of positive integer : " + pos_n);
        System.out.println("number of negative integer : " + neg_n);
        System.out.println("maximal value of positive integer : " + pos_ma);
        System.out.println("minimum value of positive integer : " + pos_mi);
        System.out.println("maximal value of negative integer : " + neg_ma);
        System.out.println("minimum value of negative integer : " + neg_mi);
        System.out.println("maximal value of positive integer : " + pos_ma);
        System.out.println("mean square error of all integers : " + s);
    }
}

四、将3.13题改为:显示出下列图案
AB
ABCD
ABCDEF
ABCDEFGH
654321
4321
21
参考答案:

题解:

package class_1;

import java.util.Scanner;

public class problem_4 {
    public static void main(String args[]) {
        System.out.println("                  AB");
        System.out.println("                 ABCD");
        System.out.println("                ABCDEF");
        System.out.println("               ABCDEFGH ");
        System.out.println("                654321");
        System.out.println("                 4321");
        System.out.println("                  21");
    }
}

五、教材第三章后面的原有的习题

六、附加题:请写出完成下面功能的程序。假定某班有10个学生,本学期上了3门课,请依次输入 姓名、第1门课成绩、第2门课成绩、第3门课成绩。
即首先输入第一个同学的姓名、第1门课成绩、第2门课成绩、第3门课成绩;
再输入第二个同学的姓名、第1门课成绩、第2门课成绩、第3门课成绩;
再输入第三个同学的姓名、第1门课成绩、第2门课成绩、第3门课成绩;…,
直至输入第10个同学的姓名、第1门课成绩、第2门课成绩、第3门课成绩。

然后求出每个同学的3门课的总分,再按总分对数组排序,最后按总分由高到低的顺序输出排序后的信息:
名次 姓名 第一门 第二门 第三门 总分

答案:
请依次输入10个同学的姓名_门课的成绩!请依次输入 1 个同学的姓名!w1
请依次输入 1 个同学的第1门课的成绩!56
请依次输入 1 个同学的第2门课的成绩!57
请依次输入 1 个同学的第3门课的成绩!58
请依次输入 2 个同学的姓名!q2
请依次输入 2 个同学的第1门课的成绩!57
请依次输入 2 个同学的第2门课的成绩!58
请依次输入 2 个同学的第3门课的成绩!59
请依次输入 3 个同学的姓名!q3
请依次输入 3 个同学的第1门课的成绩!60
请依次输入 3 个同学的第2门课的成绩!61
请依次输入 3 个同学的第3门课的成绩!67
请依次输入 4 个同学的姓名!q4
请依次输入 4 个同学的第1门课的成绩!88
请依次输入 4 个同学的第2门课的成绩!89
请依次输入 4 个同学的第3门课的成绩!90
请依次输入 5 个同学的姓名!q5
请依次输入 5 个同学的第1门课的成绩!98
请依次输入 5 个同学的第2门课的成绩!975688
请依次输入 5 个同学的第3门课的成绩!96

cc: 171 174 188 267 291

序号 总分 姓名 1门 2门 3门
5 291 q5 98 97 96
4 267 q4 88 89 90
3 188 q3 60 61 67
2 174 q2 57 58 59
1 171 w1 56 57 58
题解:
student.java

package class_1;

import java.io.*;
import java.util.Scanner;

public class student {
    String name;
    int num;
    int class_1, class_2, class_3;
    int sum_score;
    public student(int num) {
        this.num = num;
    }
    public void in() {
        Scanner sca = new Scanner(System.in);
        System.out.println("请依次输入"+num+"个同学的姓名!");
        name = sca.nextLine();
        System.out.println("请依次输入"+num+"个同学的第1门课的成绩!");
        class_1 = sca.nextInt();
        System.out.println("请依次输入"+num+"个同学的第2门课的成绩!");
        class_2 = sca.nextInt();
        System.out.println("请依次输入"+num+"个同学的第3门课的成绩!");
        class_3 = sca.nextInt();
        sum_score();
    }
    public void sum_score() {
        sum_score = class_1 + class_2 + class_3;
    }
    public void print() {
        System.out.println("     " + num + "    " + sum_score + "   " + name + "     " + class_1 + "      " + class_2 + "       " + class_3);
    }
}

problem_5.java

package class_1;

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;

public class problem_5 {
    public static void main(String[] args){
        student[] stu = new student[5];
        System.out.println("请依次输入10个同学的姓名_门课的成绩!");
        int n = 10;
        for(int i = 0; i < n; ++i) {
            stu[i] = new student(i+1);
            stu[i].in();
        }
        Arrays.sort(stu, 0, n, new Comparator<student>() {
            @Override
            public int compare(student o1, student o2) {
                return o1.sum_score > o2.sum_score ? -1 :
                (o1.sum_score == o2.sum_score ? 0 : 1); 
            }
        });
        System.out.print('\n');
        System.out.print("cc:");
        for(int i = n-1; i >= 0; --i) {
            System.out.print("   " + stu[i].sum_score);
        }
        System.out.println('\n');
        System.out.println("   序号   总分  姓名   1门     2门      3门");
        for(int i = 0; i < n; ++i) {
            stu[i].print();
        }
    }
}

七、附加题:请写出完成下面功能的程序。输入年份(4位),求出该年份的生肖。

package class_1;

import java.util.Scanner;

public class problem_7 {
    public static void main(String args[]) {
        Scanner sca = new Scanner(System.in);
        int year = 0;
        year = sca.nextInt();
        String[] str = {"mouse","ox","tiger","rabbit","dragon","snake","horse","sheep","monkey","rooster","dog","pig"};
        year %= 12;
        year -= 3;
        if(year < 0) year += 12;
        System.out.println("The current Chinese zodiac sign : " + str[year-1]);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值