站点图标 星夜笔记本

一些简单的编程题(JAVA版)

判断素数

输入一个正整数,判断是否是素数,是素数则输出“yes”,否则输出"no"

输入:一个正整数

输出:是素数则输出“yes”,否则输出"no"

输入:

17

输出:

yes
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int a = scanner.nextInt();
		for (int i = 2; i <= a; i++) {
			if (a % i == 0 && i != a) {
				System.out.println("no");
				break;
			} else if (i == a) {
				System.out.println("yes");
			}
		}
	}
}

使用循环结构输出三角形*1

输入一个整数
输出整数相对应的 * 的个数,来组成如下样式的三角形图案

输入

5

输出

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

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while (scanner.hasNext()) {
			int a = scanner.nextInt();
			String str = "";
			for (int i = 0; i < a; i++) {
				System.out.println(str += "*");
			}
		}
	}
}

简单的密码

现在想将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序输出“LiMingHuiJun"对应的密码。

public class Main {
	public static void main(String[] args) {
		String str = "LiMingHuiJun";
		char[] text = new char[50];
		for (int i = 0; i < str.length(); i++) {
			text[i] = (char) (str.charAt(i) + 4);
		}
		for (int i = 0; i < str.length(); i++) {
			System.out.print(text[i]);
		}
	}
}

完数

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,一行输出一个完数

public class Main {
	public static void main(String[] args) {
		for (int i = 1; i <= 1000; i++) {
			int sum = 0;
			for (int j = 1; j <= i / 2; j++) {
				if (i % j == 0) {
					sum += j;
				}
			}
			if (sum == i) {
				System.out.println(sum);
			}
		}
	}
}

对称图案

输出以下图案:(注:右边无空格)

   *
  ***
 *****
*******
 *****
  ***
   *
public class Main {
	public static void main(String[] args) {
		int line = 4;
		for (int i = 1; i <= line; i++) {
			for (int j = 1; j <= line - i; j++) {
				System.out.print(" ");
			}
			for (int k = 1; k <= 2 * i - 1; k++) {
				System.out.print('*');
			}
			System.out.println();
		}
		for (int i = 1; i <= line - 1; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(" ");
			}
			for (int k = 1; k <= 2 * (line - i) - 1; k++) {
				System.out.print('*');
			}
			System.out.println();
		}
	}
}

多位和运算

求Sn=a+aa+aaa+...+ a...a(n个a)之值,其中a是一个数字2,n表示a的位数,n由键盘输入。例如:
2+22+222+2222+22222 (此时n=5)

输入:a的位数n

输出:Sn的值

输入:

1

输出:

2
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int a = 2, Sn = 0;
		for (int i = 0; i < n; i++) {
			Sn += a;
			a = a * 10 + 2;
		}
		System.out.println(Sn);
	}
}

输出以下4*5的矩阵

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

输出的4*5矩阵元素之间用一个空格分隔

public class Main {
	public static void main(String[] args) {
		int num = 1;
		for (int i = 0; i < 4; i++) {
			String str = "";
			for (int j = 0; j < 5; j++) {
				str += (j * num) + num+" ";
			}
			num += 1;
			System.out.println(str.trim());
		}
	}
}

火星数字

火星人是以 13 进制计数的:

地球人的 0 被火星人称为 tret。
地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。
例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

输入要求:输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

输出要求:对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

输入

4
29
5
elo nov
tam

输入

hel mar
may
115
13
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(new BufferedInputStream(System.in));
		int N = scan.nextInt();
		if (N >= 100) {
			return;
		}
		String input = "";
		String a[] = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec" };
		String b[] = { "tret", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou" };
		int jinwei = 0;
		int diwei = 0;
		int temp;
		scan.nextLine();
		String inputs[] = new String[2];
		for (int i = 0; i < N; i++) {
			input = scan.nextLine();
			if (input.charAt(0) - 'a' >= 0 && input.charAt(0) - 'a' <= 25) {
				if (input.contains(" ")) {
					inputs = input.split(" ");
					for (int j = 0; j <= 12; j++) {
						if (b[j].equals(inputs[0])) {
							jinwei = j * 13;
						}
						if (a[j].equals(inputs[1])) {
							diwei = j;
						}
					}
					System.out.println(jinwei + diwei);
				} else {
					for (int j = 0; j < b.length; j++) {
						if (a[j].equals(input)) {
							System.out.println(j);
							break;
						}
						if (b[j].equals(input)) {
							System.out.println(j * 13);
							break;
						} else if (j == b.length - 1) {
							System.out.println(13);
						}
					}
				}
			} else {
				temp = Integer.parseInt(input);
				if (temp >= 169) {
					return;
				} else if (temp >= 0 && temp < 13) {
					System.out.println(a[temp]);
				} else {
					jinwei = temp / 13;
					diwei = temp % 13;
					if (diwei == 0) {
						System.out.println(b[jinwei]);
					} else {
						System.out.println(b[jinwei] + " " + a[diwei]);
					}
				}
			}
		}
	}
}

害死人不偿命的(3n+1)猜想

卡拉兹(Callatz)猜想:

对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把  (3n+1)  砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (,以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

输入要求:每个测试输入包含 1 个测试用例,即给出正整数 n 的值。

输出要求:输出从 n 计算到 1 需要的步数。

输入

3

输出

5
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt(), step;
		for (step = 0; n != 1; step++) {
			if (n % 2 == 0) {
				n = n / 2;
			} else {
				n = (3 * n + 1) / 2;
			}
		}
		System.out.println(step);
	}
}

最大利润

外汇交易可以通过兑换不同国家的货币以赚取汇率差。比如1 美元兑换100 日元时购入1000 美元,然后等汇率变动到1 美元兑换108 日元时再卖出,这样就可以赚取( 108 - 100 ) x 1000 = 8000 日元。

现在请将某货币在 t 时刻的价格Rt=(t=0,1,2,...n−1) 作为输人数据, 计算出价格差Rj-Ri(其中j>i) 的最大值。

限制:

输入:第1 行输入整数接下来w 行依次给整数Rt=(t=0,1,2,...n−1)赋值。
输出:在单独1 行中输出最大值。

【输入】
6
5
3
1
3
4
3
【输出】
3
【输入】
3
4
3
2
【输出】 
-1
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		if (N >= 100) {
			return;
		}
		int[] arr = new int[200000];
		for (int i = 0; i < N; i++) {
			arr[i] = scan.nextInt();
		}
		int maxv = -2000000000, minv = arr[0];
		for (int i = 1; i < N; i++) {
			maxv = maxv > arr[i] - minv ? maxv : arr[i] - minv;
			minv = minv < arr[i] ? minv : arr[i];
		}
		System.out.println(maxv);
	}
}

数字转英文序号

李老师想升级平台,把实训的题目序号进行处理,把题目的数字序号
转成字母序号,比如第 1 题对应的是 A 题,第 2 题对应的是 B 题,第 26
题对应的是 Z 题,第 27 题对应的是 AA 题,以此类推,AB、AC、……、AZ、BA、BB、……、
BZ、CA、……、ZZ,请你编写程序把给定的数字序号转成对应的字母序号。

输入/输出要求:
输入:
第一行是测试用例的数目 T,接下来是 T 行,每一行是一个整数,最多不超过 500
输出:
对于每个测试用例输出对应的字母序号

样例输入/输出:
样例输入:
2
1
26
样例输出:
A
Z

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int line = scanner.nextInt();
		int num[] = new int[line];
		for (int index = 0; index < line; index++) {
			num[index] = scanner.nextInt();
		}
		for (int index = 0; index < line; index++) {
			int[] arr = new int[3];
			int i=0;
			for(;num[index]!=0;i++) {
				if (num[index] % 26 == 0) {
					arr[i] = 26 + 64;
					num[index] -= 26;
				} else {
					arr[i] = num[index] % 26 + 64;
				}
				num[index] /= 26;
			}
			for (int j = i - 1; j >= 0; j--) {
				System.out.print((char) (arr[j]));
			}
			System.out.println();
		}
	}
}

数字卡片

小蓝有很多数字卡片,每张卡片上都是数字0 到9。
小蓝准备用这些卡片来拼一些数,他想从1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从1 拼到多少。
例如,当小蓝有30 张卡片,其中0 到9 各3 张,则小蓝可以拼出1 到10,但是拼11 时卡片1 已经只有一张了,不够拼出11。
现在小蓝手里有0 到9 的卡片各2021 张,共20210 张,请问小蓝可以从1拼到多少?

public class Main {
	public static void main(String[] args) {
		int num=0,i;
		for(i=0;i<10000;i++) {
			for(int j=0;j<(int)(Math.log10(i)+1);j++) {
				if('1'==(""+i).charAt(j)) num++;
			}
			if(num>2021) break;
		}
		System.out.println(i-1);
	}
}

退出移动版