一、输入正整数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]);
}
}