编译环境:IDEA
一 水仙花数
【问题描述】输出从指定起始值到999以内(包括999)的“水仙花数”,水仙花数是指一个三位数,其各位数字的立方和等于其本身,例如:153=13+53+33,因此153是水仙花数。起始值由键盘输入。
【输入形式】从100起始的一个三位数
【输出形式】一行输出满足条件的水仙花数,用一个空格分隔数据,最后一个数据后也有一个空格
【样例输入】100
【样例输出】153 370 371 407
【样例说明】无
【评分标准】通过测试用例才能得分
//水仙花数
import java.util.Scanner;//main中直接输入Scanner回车自动补充
class Main{
public static void main(String[] args) {//改行只需输入 main +回车自动补充
Scanner sc = new Scanner(System.in);
int a =sc.nextInt();
for (int i = a; i < 1000; i++) {//fori+回车
int b,c,d;
b=i%10; //取个位
c=i/10%10; //取十位
d=i/10/10%10; //取百位
if (Math.pow(b,3)+Math.pow(c,3)+Math.pow(d,3) == i) {
System.out.print(i+" ");
}
}
}
}
二、 n个整数排序
【问题描述】输入n和n个整数,输出排序后的数据。(其中n值不超过100)
【输入形式】输入n和n个整数。(即输入的第一个数表示n,后面再输入n个整数)
【输出形式】输出数据占一行。数据间用空格分开,最后一个数后无空格
【样例输入】5 8 9 -12 6 -89
【样例输出】-89 -12 6 8 9
//整数排序
import java.util.Arrays;
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sca =new Scanner(System.in);
int cnt = sca.nextInt();
int[] num=new int[cnt];
for (int i = 0; i < cnt; i++) {
num[i] = sca.nextInt();
}
Arrays.sort(num); //使用函数排序
for (int i = 0; i < cnt; i++) {
System.out.print(num[i]);
if (i != cnt-1) { //每个数后加空格
System.out.print(" ");
}
}
}
}
三、杨辉三角
【问题描述】存储并打印杨辉三角的前n行。(n<=12)
【输入形式】一个整数n,表示所要打印的杨辉三角的行数(n<=12)
【输出形式】按行输出与n对应的杨辉三角(每个数据占4列,数据右靠)
【样例输入】6
【样例输出】
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
//水仙花数
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int n = scn.nextInt();
int arr[][] = new int[n][n];
for (int i = 0; i < arr.length; i++) { //arr.length返回的是二维数组的行数
for (int j = 0; j <= i; j++) { //在第n行 其就有n个数
if (j == 0||j == i) { //如果是每行第一个或最后一个
arr[i][j] = 1;
}
else{ //若是中间的数
arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; //见图片
}
System.out.format("%4d",arr[i][j]); //格式化输出
}
System.out.println(); //一行输出完毕换行
}
}
}
四、 将n个十六进制数转换为十进制数,并求和
【问题描述】编写一个方法h2D(String s)将一个由数字字符和大写字母A、B、C、D、E、F组成的十六进制数转换成十进制数。 编写一个测试类,输入一个整数n,后面跟n个十六进制串,调用上述方法把它们转换成十进制整数,并输出它们的和。
【输入形式】一个整数n ,后跟n个十六进制数
【输出形式】n个十六进制数转换为十进数之后的和
【样例输入】3 1A5C 271 FF
【样例输出】7628
//将n个十六进制数转换为十进制数,并求和
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
int n = sca.nextInt(); // n个数字
int result = 0; //和的结果
for (int i = 0; i < n; i++) {
String str = sca.next(); //将十六进制数看作字符串输入
result += h2D(str);
}
System.out.println(result);
}
public static int h2D(String s) { //方法(要在main里面)
return Integer.parseInt(s,16); //将字符串s(16进制)转化为十进制
}
}
五、约瑟夫环
【问题描述】有编号分别1、2、…、n的n个人依次排成一个圆圈形的队列,从1号开始循环报数1、2、3,报到3的人出列,其余的人继续循环报数,直到队列中剩下最后一人为止。输出留在队列中的最后那个人的编号 。
【输入形式】正整数n
【输出形式】最后留在队伍中的那个人的编号
【样例输入】6
【样例输出】1
//约瑟夫环
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
int n = sca.nextInt();
List<Integer> arr = new ArrayList<Integer>(); //动态数组
//初始化 每个置为1 表示还在队伍
for (int i = 0; i < n; i++) {
arr.add(1);
}
int t = 0, i = 0, cnt = 0;
// t 表示计数(计是否数到三
do {
//遍历数组 成环状
if (i == n) {
i = 0;
}
for (; i < n; i++) {
//跳过排除的学生
if (arr.get(i) == 0) {
continue;
}
else {
//数数,记录
t++;
if (t == 3) { //报到3了
//System.out.println(i);
arr.set(i, 0); //置为0,排除
t = 0; //重新数数
cnt++; //记录排除的人数
}
}
}
} while (cnt <= n - 1); //循环n-1次,排除n-1个学生
//System.out.println("循环次数:"+cnt);
//找到留下的学生
for (i = 0; i < n; i++) {
if (arr.get(i) == 1) {
System.out.println(i + 1);
break;
}
}
}
}
六、打印菱形星块
【问题描述】编程,输入整数n,打印类似于下面的2n-1行的菱形星块。
【输入形式】一个正整数
【输出形式】菱形星块
【样例输入】5
【样例输出】
//输出*三角阵
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
//输入n
int n = sca.nextInt();
int t =2;
//绝对值
for (int i = 1; i <= 2 * n - 1; i++) {
//输出空格
for (int j = 0; j < Math.abs(n - i); j++) {
System.out.print(" ");
}
//输出* 前n行
if (i<=n){
for (int k = 0; k < 2 * i - 1; k++) {
System.out.print("*");
}
}
//输出后n-1行
else {
for (int k = 0; k < 2 * (i-t) - 1; k++) {
System.out.print("*");
}
t+=2;
}
//一行结束换行
System.out.print("\n");
}
}
}
七、两个实数的四则运算
【问题描述】从键盘输入两个实数,完成两个实数的四则运算,注意处理除数为0的情况。
说明:实数用float型存储
【输入形式】两个实数
【输出形式】两个实数的四则运算结果
【样例输入】
//以下为两组测试数据,本行仅为说明,不输入,每次只测试一组数据
24 56
12 0
【样例输出】
80.0
-32.0
1344.0
0.42857143
12.0
12.0
0.0
error!Divide by zero!
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
float a = sca.nextFloat();
float b = sca.nextFloat();
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
if (b==0){
System.out.println("error!Divide by zero!");
}
else {
System.out.println(a / b);
}
}
}
编程片段题
二、求e的近似值
【问题描述】下列程序用公式:e=1+1/1!+1/2!+1/3!+1/4!+……计算e常数,要求误差小于10-8,输出结果小数点后保留8位,程序运行输出为:2.71828183
【输入形式】无
【输出形式】2.71828183
【样例输入】无
【样例输出】2.71828183
class Test
{
public static void main (String[] args)
{
double f=1;
int k=1;
int i=1;
do{
k=k*i;
f=f+1.0/k;
i++;
}while(1.0/k>=1e-8); //误差小于1e-8
System.out.printf( "%.8f",f ); //java没有lf
}
}
java格式化输出