第 1 题(编程题)
题目名称:
打印 X 图形
题目内容:
https://www.nowcoder.com/practice/83d6afe3018e44539c51265165806ee4
假设i代表行,j代表列,当i==j 或者 i+j+1 == n,此时为星号。其余的都是空格。
如图, 把它想成平面直角坐标系, 发现i==j或i+j==n的时候, 分别是两根直线关于横纵坐标轴的方程表达式
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int n = in.nextInt(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if(i==j || i + j == n-1 ){ System.out.print("*"); } else{ System.out.print(" "); } } System.out.println(" "); } } } }
第 2 题(编程题)
题目名称:
计算分数的值
题目内容:
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。
思路:
1. 从上述表达式可以分析出
a. 该表达式主要由100项,基数项为正,偶数项为负
2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0
然后使用flag标记控制奇偶项,奇数项为正,偶数项为负
然后将所有的项相加即可
public static void main(String[] args) { double sum = 0; int flg = 1; for (int i = 1; i <= 100; i++) { sum += 1.0/i * flg; flg = -flg; } System.out.println(sum); }
第 3 题(编程题)
题目名称:
输出一个整数的每一位
题目内容:
输出一个整数的每一位,如:123的每一位是3,2,1
本题主要考虑,如何获取一个数字的每一位:
123 % 10 = 3
123/10=12 12%10=2
12/10=1 1%10= 1
代码如下:
public static void main(String[] args) { int n = 123; while (n != 0) { System.out.println(n % 10); n /= 10; } }
第 4 题(编程题)
题目名称:
模拟登陆
题目内容:
编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序
本题注意考察,字符串怎么比较相同?使用方法equals。
public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = 3; while (count != 0){ System.out.print("请输入>"); String password = in.nextLine(); count--; if(password.equals("123abc")){ System.out.println("密码正确 登陆成功"); break; } else { System.out.println("密码错误"); System.out.println("剩余" + count +"次机会"); } } if (count == 0){ System.out.println("机会耗尽 登录失败"); } }
第 5 题(编程题)
题目名称:
使用函数求最大值
题目内容:
创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3。
要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算
public static int max2(int a,int b) { return a > b ? a:b; } public static int max3(int a,int b,int c) { int max = max2(a,b); return max > c ? max : c; } public static void main(String[] args) { System.out.println(max3(2, 5, 1)); }
第 6 题(编程题)
题目名称:
斐波那契数列
题目内容:
求斐波那契数列的第n项。(迭代实现)
斐波那契数列定义为:1 1 2 3 5 8 13 21 我们可以看到,从第3项开始,都等于前一项+前一项的前一项的和。
3=1+2
5+2+3
13 = 5+8
我们可以先定义f1保存第一项的值,f2保存第2项的值,f3保存第3项的值。
每次算法一个f3,就同步更新f1和f2的值。
public static int fib(int n) { if(n == 1 || n == 2 ) { return 1; } int f1 = 1; int f2 = 1; int f3 = 1; for (int i = 3; i <= n; i++) { f3 = f1+f2; f1 = f2; f2 = f3; } return f3; }
第 7 题(编程题)
题目名称:
求和的重载
题目内容:
在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码,求出结果
重载满足的几个条件:
- 方法名相同
- 参数列表不同(数据类型,个数,顺序)
- 返回值无关
public static int sum(int a,int b) { return a+b; } public static double sum(double a,double b,double c) { return a+b+c; }
第 8 题(编程题)
题目名称:
求最大值方法的重载
题目内容:
在同一个类中定义多个方法:要求不仅可以求2个整数的最大值,还可以求3个小数的最大值?
重载:
- 方法名相同
- 参数列表不同(数据类型,个数,顺序)
- 返回值无关
本题可以借助Java原生类Math当中的max方法求最大值,当然也可以自己通过If else进行比较。
Math的使用 不需要导入相关的包
public static int max(int a,int b) { return Math.max(a,b); } public static double max(double a,double b,double c) { double m = Math.max(a,b); return Math.max(m,c); }