判断素数
输入一个正整数,判断是否是素数,是素数则输出“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) 的最大值。
限制:
- 2≤n≤200,000
- 1≤Rt≤109
输入:第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);
}
}