while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main
{
public static void main(String[] args)
{
int i = 0;

while (i < 10)
{
System.out.println(i);
i ++;
}
}
}

练习1:求1~100中所有数的立方和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main
{
public static void main(String[] args)
{
int i = 1, ans = 0;
while (i <= 100)
{
ans += i * i * i;
i ++;
}

System.out.println(ans);
}
}

练习2:求斐波那契数列的第n项。f(1) = 1, f(2) = 1, f(3) = 2, f(n) = f(n-1) + f(n-2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;

public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int a = 1, b = 1, i = 1;

while(i < n)
{
int c = a + b;
a = b;
b = c;
i ++;
}

System.out.println(a);
}
}

do while循环

do while语句与while语句非常相似。唯一的区别是,do while语句限制性循环体后检查条件。不管条件的值如何,我们都要至少执行一次循环。

for循环

基本思想:把控制循环次数的变量从循环体中剥离。
练习1:求1~100中所有数的立方和

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main
{
public static void main(String[] args)
{
int sum = 0;
for (int i = 1; i <= 100; i ++)
{
sum += i * i * i;
}

System.out.println(sum);
}
}

练习2:求斐波那契数列的第n项。f(1) = 1, f(2) = 1, f(3) = 2, f(n) = f(n-1) + f(n-2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a = 1, b = 1;

for (int i = 1; i < n; i ++)
{
int c = a + b;
a = b;
b = c;
}

System.out.println(a);
}
}

练习3:求 1 * 10 + 2 * 9 + 3 * 8 + 4 * 7 + 5 * 6

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main
{
public static void main(String[] args)
{
int sum = 0;
for (int i = 1, j = 10; i <= 5; i ++, j --)
{
sum = sum + i * j;
}

System.out.println(sum);
}
}

跳转语句

break

可以提前从循环中退出,一般与if语句搭配。

例题:输入一个大于1的数,判断这个数是否是质数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;

public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();

boolean isPrime = true;
for (int i = 2; i < n; i ++)
{
if (n % i == 0)
{
isPrime = false;
break;
}
}

if (isPrime)
System.out.printf("yes");
else
System.out.printf("no");
}
}

continue

可以直接跳到当前循环体的结尾。作用与if语句类似。
例题:求1~100中所有偶数的和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main
{
public static void main(String[] args)
{
int sum = 0;

for (int i = 1; i <= 100; i ++)
{
if (i % 2 == 1)
continue;

sum += i;
}

System.out.println(sum);
}
}

多层循环

练习1:将1~100打印到一个10 * 10的矩阵中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main
{
public static void main(String[] args)
{
int k = 1;
for (int i = 0; i < 10; i ++)
{
for (int j = 0; j < 10; j ++)
{
System.out.printf("%d ", k ++);
}
System.out.println();
}
}
}

练习2:打印1~100中的所有质数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main
{
public static void main(String[] args)
{
for (int i = 2; i <= 100; i ++)
{
boolean isPrime = true;
for (int j = 2; j < i; j ++)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}

if (isPrime)
System.out.println(i);
}
}
}

例题

  1. 偶数

    输出1到100之间(包括1和100)之间的所有偶数

    输出格式

    输出全部偶数,每个偶数占一行

    输出样例

    1
    2
    3
    4
    5
    2
    4
    6
    ...
    100

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Main
    {
    public static void main(String[] args)
    {
    for (int i = 1; i <= 100; i ++)
    {
    if (i % 2 == 0)
    System.out.println(i);
    }
    }
    }
  2. 奇数

    输入一个整数x,输出1到x之间(包括1和x)之间的全部奇数

    输入格式

    一个整数

    输出格式

    输出所有满足条件的奇数,每个数占一行

    数据范围

    1≤X≤1000

    输入样例

    1
    8

    输出样例

    1
    2
    3
    4
    1
    3
    5
    7

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int x = sc.nextInt();

    for (int i = 1; i <= x; i ++)
    if (i % 2 != 0)
    System.out.println(i);
    }
    }
  3. 正数

    输入 6 个实数,它们要么是正数,要么是负数。

    请你统计并输出正数的个数。

    输入格式

    六个数字,每个占一行。

    输出格式

    输出格式为 x positive numbers,其中 x 为正数的个数。

    数据范围

    输入数字的绝对值不超过 100

    输入样例

    1
    2
    3
    4
    5
    6
    7
    -5
    6
    -3.4
    4.6
    12

    输出样例

    1
    4 positive numbers

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int cnt = 0;
    for (int i = 0; i < 6; i ++)
    {
    double a = sc.nextDouble();
    if (a > 0) cnt ++;
    }

    System.out.printf("%d positive numbers", cnt);
    }
    }
  4. 连续奇数的和 1

    给定两个整数 X 和 Y,输出在他们之间(不包括 X 和 Y)的所有奇数的和。

    输入格式

    第一行输入 X,第二行输入 Y

    输出格式

    输出一个整数,表示所有满足条件的奇数的和

    数据范围

    −100≤X,Y≤100

    输入样例1

    1
    2
    6
    -5

    输出样例1

    1
    5

    输入样例2

    1
    2
    15
    12

    输出样例2

    1
    13

    输入样例3

    1
    2
    12
    12

    输出样例3

    1
    0

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int x = sc.nextInt(), y = sc.nextInt();
    int sum = 0;

    if (x > y)
    {
    int tmp = x;
    x = y;
    y = tmp;
    }

    for (int i = x + 1; i < y; i ++)
    {
    if (i % 2 != 0)
    {
    sum += i;
    }

    }

    System.out.println(sum);
    }
    }
  5. 最大数和它的位置

    给定 100 个整数,请你找出其中最大的数字,以及它的输入位置(位置从 1 开始)

    输入格式

    共 100 行,每行包含一个整数

    输出格式

    第一行输出最大的数字。

    第二行输出该数字的输入位置。

    数据范围

    1≤输入数字≤50000

    保证输入数字互不相同。

    输入样例

    1
    2
    3
    4
    5
    6
    7
    22229
    48558
    24992
    4755
    11923
    ...
    20213

    输出样例

    1
    2
    48558
    2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    int cnt = 1;
    for (int i = 2; i <= 100; i ++)
    {
    int b = sc.nextInt();
    if (a < b)
    {
    a = b; //用a记录最大的数
    cnt = i; //用cnt记录最大的数的位置
    }
    }

    System.out.println(a);
    System.out.println(cnt);
    }
    }
  6. 递增序列

    读取一系列的整数 X,对于每个 X,输出一个 1,2,…,X 的序列。

    输入格式

    输入文件中包含若干个整数,其中最后一个为 0,其他的均为正整数。

    每个整数占一行。

    对于输入的正整数,按题目要求作输出处理。

    对于最后一行的整数 0,不作任何处理。

    输出格式

    对于每个输入的正整数 X,输出一个从 1 到 X 的递增序列,每个序列占一行。

    数据范围

    1≤X≤100

    输入样例

    1
    2
    3
    4
    5
    10
    3
    0

    输出样例

    1
    2
    3
    1 2 3 4 5
    1 2 3 4 5 6 7 8 9 10
    1 2 3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < 100; i ++)
    {
    int x = sc.nextInt();
    if (x == 0)
    break;
    else
    {
    for (int j = 1; j <= x; j ++)
    System.out.printf("%d ", j);
    }
    System.out.println();
    }
    }
    }
  7. 连续整数相加

    读入两个整数值 A 和 N,计算从 A 开始的 N 个连续整数的和。

    注意,如果读入的 N 为 0 或负数,则继续读取数字直至读入 N 值为正整数为止。

    输入格式

    共一行,包含整数 A 和若干个整数 N(不超过 100 个)

    输出格式

    一个整数,表示从 A 开始的 N 个连续整数的和。

    数据范围

    1≤A≤100

    −100≤N≤100

    输入样例1

    1
    3 2

    输出样例1

    1
    7

    输入样例2

    1
    3 -1 0 -2 2

    输出样例2

    1
    7

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    int n = 0, sum = 0;

    for (int i = 0; i < 100; i ++)
    {
    n = sc.nextInt();
    if (n > 0)
    break;
    }

    for (int i = a; i < a + n; i ++)
    sum += i;

    System.out.println(sum);
    }
    }
  8. 约数

    输入一个整数 N,按照从小到大的顺序输出它的全部约数

    输入格式

    一个整数

    输出格式

    输出全部约数,每个约数占一行

    数据范围

    1≤N≤1000

    输入样例

    1
    6

    输出样例

    1
    2
    3
    4
    1
    2
    3
    6

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    for (int i = 1; i <= n; i ++)
    {
    if (n % i == 0)
    System.out.println(i);
    }
    }
    }
  9. PUM

    输入两个整数 N 和 M,构造一个 N 行 M 列的数字矩阵,矩阵中的数字从第一行到最后一行,按从左到右的顺序依次为 1,2,3,…,N×M

    矩阵构造完成后,将每行的最后一个数字变为 PUM。

    输出最终矩阵。

    输入格式

    共一行,包含两个整数

    输出格式

    输出最终矩阵,具体形式参照输出样例

    数据范围

    1≤N,M≤20

    输入样例

    1
    7 4

    输出样例

    1
    2
    3
    4
    5
    6
    7
    1 2 3 PUM
    5 6 7 PUM
    9 10 11 PUM
    13 14 15 PUM
    17 18 19 PUM
    21 22 23 PUM
    25 26 27 PUM

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt(), m = sc.nextInt();

    int k = 1;
    for (int i = 0; i < n; i ++)
    {
    for (int j = 0; j < m - 1; j ++)
    {
    System.out.printf("%d ", k);
    k ++;
    }
    System.out.println("PUM");
    k ++;
    }
    }
    }

习题

  1. 余数

    输入一个整数 N,请按顺序输出 1 到 10000 之间(不包括 1 和 10000)的所有除以 N 余 2 的数字。

    输入格式

    一个整数

    输出格式

    输出所有满足条件的数字,从小到大每行输出一个。

    数据范围

    2< N <10000

    输入样例

    1
    13

    输出样例

    1
    2
    3
    4
    5
    2
    15
    28
    41
    ...

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    for (int i = 2; i < 10000; i ++)
    {
    if (i % n == 2)
    System.out.println(i);
    }
    }
    }
  2. 六个奇数

    读取一个整数 X,输出 X 之后的 6 个奇数,如果 X 也是奇数,那么它也算作 6 个奇数之一。

    输入格式

    一个整数

    输出格式

    所有满足条件的奇数,每个占一行

    数据范围

    1≤X≤100

    输入样例

    1
    9

    输出样例

    1
    2
    3
    4
    5
    6
    9
    11
    13
    15
    17
    19

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int x = sc.nextInt();

    if (x % 2 != 0)
    {
    for (int i = 0; i < 6; i ++)
    {
    System.out.println(x);
    x += 2;
    }
    }
    else
    {
    x += 1;
    for (int i = 0; i < 6; i ++)
    {
    System.out.println(x);
    x += 2;
    }
    }
    }
    }
  3. 乘法表

    输入一个整数 N,输出 N 的乘法表,如下

    1
    2
    3
    4
    1 x N = N      
    2 x N = 2N
    ...
    10 x N = 10N

    输入格式

    一个整数

    输出格式

    具体形式参照输出样例

    数据范围

    1< N <1000

    输入样例

    1
    140

    输出样例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1 x 140 = 140
    2 x 140 = 280
    3 x 140 = 420
    4 x 140 = 560
    5 x 140 = 700
    6 x 140 = 840
    7 x 140 = 980
    8 x 140 = 1120
    9 x 140 = 1260
    10 x 140 = 1400

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    for (int i = 1; i <= 10; i ++)
    {
    System.out.printf("%d x %d = %d\n", i, n, i * n);
    }
    }
    }
  4. 实验

    医学部一共进行了 N 场动物实验。

    共有三种小动物可用来实验,分别是青蛙、老鼠和兔子。

    每次实验都会选取其中一种动物来参与实验,选取数量若干。

    现在请你统计一下医学部一共用了多少小动物,每种分别用了多少,每种动物使用数量占总量的百分比分别是多少。

    输入格式

    第一行包含整数 N,表示实验次数。

    接下来 N 行,每行包含一个整数 A(表示一次实验使用的小动物的数量)和一个字符 T(表示一次实验使用的小动物的类型,C 表示兔子(coney),R 表示老鼠(rat),F 表示青蛙(frog))。

    输出格式

    请你参照输出样例,输出所用动物总数,每种动物的数量,以及每种动物所占百分比。

    注意输出百分比时,保留两位小数。

    数据范围

    1≤N≤100

    1≤A≤15

    输入样例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    10
    10 C
    6 R
    15 F
    5 C
    14 R
    9 C
    6 R
    8 F
    5 C
    14 R

    输出样例

    1
    2
    3
    4
    5
    6
    7
    Total: 92 animals
    Total coneys: 29
    Total rats: 40
    Total frogs: 23
    Percentage of coneys: 31.52 %
    Percentage of rats: 43.48 %
    Percentage of frogs: 25.00 %

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int cnt = 0, c = 0, r = 0, f = 0;

    while (n -- > 0)
    {
    int a = sc.nextInt();
    String t = sc.next();
    if (t.equals("C"))
    {
    c += a;
    }
    else if (t.equals("R"))
    {
    r += a;
    }
    else
    f += a;

    cnt += a;
    }

    System.out.printf("Total: %d animals\n", cnt);
    System.out.printf("Total coneys: %d\n", c);
    System.out.printf("Total rats: %d\n", r);
    System.out.printf("Total frogs: %d\n", f);
    System.out.printf("Percentage of coneys: %.2f %%\n", (double)c * 100/ cnt);
    System.out.printf("Percentage of rats: %.2f %%\n", (double)r * 100/ cnt);
    System.out.printf("Percentage of frogs: %.2f %%\n", (double)f * 100/ cnt);
    }
    }
  5. 区间 2

    读取 N 个整数 X1,X2,…,XN,判断这 N 个整数中有多少个在 [10,20] 的范围内,有多少个在范围外。

    输入格式

    第一行包含整数 N,表示共有 N 个整数需要进行判断。

    接下来 N 行,每行包含一个整数 Xi

    输出格式

    第一行输出 x in,其中 x 为在范围内的整数的数量。

    第二行输出 y out,其中 y 为在范围外的整数的数量。

    数据范围

    1≤N≤10000

    −107< Xi <107

    输入样例

    1
    2
    3
    4
    5
    4
    14
    123
    10
    -25

    输出样例

    1
    2
    2 in
    2 out

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int cnt = 0;

    for (int i = 0; i < n; i ++)
    {
    int x = sc.nextInt();
    if (x >= 10 && x <= 20)
    cnt ++;
    }

    System.out.printf("%d in\n", cnt);
    System.out.printf("%d out\n", n - cnt);
    }
    }
  6. 连续奇数的和 2

    输入 N 对整数对 X,Y,对于每对 X,Y,请你求出它们之间(不包括 X 和 Y)的所有奇数的和

    输入格式

    第一行输入整数 N,表示共有 N 对测试数据。

    接下来 N 行,每行输入一组整数 X 和 Y

    输出格式

    每对 X,Y 输出一个占一行的奇数和

    数据范围

    1≤N≤100

    −1000≤X,Y≤1000

    输入样例

    1
    2
    3
    4
    5
    6
    7
    8
    7
    4 5
    13 10
    6 4
    3 3
    3 5
    3 4
    3 8

    输出样例

    1
    2
    3
    4
    5
    6
    7
    0
    11
    5
    0
    0
    0
    12

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int cnt = 0;

    for (int i = 0; i < n; i ++)
    {
    int x = sc.nextInt();
    int y = sc.nextInt();
    if (x > y)
    {
    int tmp = y;
    y = x;
    x = tmp;
    }
    int sum = 0;
    for (int j = x + 1; j < y; j ++)
    {
    if (j % 2 != 0)
    sum += j;
    }
    System.out.println(sum);
    }
    }
    }
  7. 简单斐波那契

    输入一个整数 N,请你输出斐波那契序列的前 N 项

    输入格式

    一个整数

    输出格式

    在一行中输出斐波那契数列的前 N 项,数字之间用空格隔开

    数据范围

    0< N< 46

    输入样例

    1
    5

    输出样例

    1
    0 1 1 2 3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int a = 0, b = 1;
    int n = sc.nextInt();

    for (int i = 0; i < n; i ++)
    {
    System.out.printf("%d ", a);
    int c = a + b;
    a = b;
    b = c;
    }
    }
    }
  8. 数字序列和它的和

    输入若干个整数对 M,N,对于每个数对,输出以这两个数为最大值和最小值的公差为 1 的等差数列。

    注意,当输入整数对中,任意一个数为 0 或负整数时,立即停止输入,且该组数对无需作任何处理。

    输入格式

    输入共若干行,每行包含两个整数。

    最后一行的两个整数中,至少有一个是非正整数。

    输出格式

    对于每组需作处理的数对,输出一个结果,每个结果占一行。

    结果包含从最小值到最大值的数字序列以及数字序列各数字之和。

    具体格式请参照输出样例。

    数据范围

    M,N≤100

    输入样例

    1
    2
    3
    2 5
    6 3
    5 0

    输出样例

    1
    2
    2 3 4 5 Sum=14
    3 4 5 6 Sum=18

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < 100; i ++)
    {
    int m = sc.nextInt();
    int n = sc.nextInt();
    int sum = 0;

    if (m <= 0 || n <= 0)
    break;
    else
    {
    if (m > n)
    {
    int tmp = m;
    m = n;
    n = tmp;
    }

    for (int j = m; j <= n; j ++)
    {
    System.out.printf("%d ", j);
    sum += j;
    }

    }
    System.out.printf("Sum=%d\n", sum);
    }
    }
    }
  9. 完全数

    一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数。

    例如,6 就是一个完全数,因为它的除了本身以外的其他约数的和为 1+2+3=6

    现在,给定你 N 个整数,请你依次判断这些数是否是完全数

    输入格式

    第一行包含整数 N,表示共有 N 个测试用例。

    接下来 N 行,每行包含一个需要你进行判断的整数 X

    输出格式

    每个测试用例输出一个结果,每个结果占一行。

    如果测试数据是完全数,则输出 X is perfect,其中 X 是测试数据。

    如果测试数据不是完全数,则输出 X is not perfect,其中 X 是测试数据。

    数据范围

    1≤N≤100

    1≤X≤10^8

    输入样例

    1
    2
    3
    4
    3
    6
    5
    28

    输出样例

    1
    2
    3
    6 is perfect
    5 is not perfect
    28 is perfect

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    while (n -- > 0)
    {
    int x = sc.nextInt();
    if (x == 1)
    System.out.printf("%d is not perfect\n", 1);
    else
    {
    int sum = 1;
    for (int i = 2; i * i <= x; i ++)
    {
    if (x % i == 0)
    {
    if (i != x / i)
    {
    sum += i;
    sum += x / i;
    }
    else
    sum += i;
    }
    }
    if (sum == x)
    System.out.printf("%d is perfect\n", x);
    else
    System.out.printf("%d is not perfect\n", x);
    }
    }
    }
    }
  10. 质数

    一个大于 1 的自然数,如果除了 1 和它自身外,不能被其他自然数整除则称该数为质数。

    例如 7 就是一个质数,因为它只能被 1 和 7 整除。

    现在,给定你 N 个大于 1 的自然数,请你依次判断这些数是否是质数。

    输入格式

    第一行包含整数 N,表示共有 N 个测试数据。

    接下来 N 行,每行包含一个自然数 X

    输出格式

    每个测试用例输出一个结果,每个结果占一行。

    如果测试数据是质数,则输出 X is prime,其中 X 是测试数据。

    如果测试数据不是质数,则输出 X is not prime,其中 X 是测试数据。

    数据范围

    1≤ N ≤100

    1< X ≤107

    输入样例

    1
    2
    3
    4
    3
    8
    51
    7

    输出样例

    1
    2
    3
    8 is not prime
    51 is not prime
    7 is prime

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    while(n -- > 0)
    {
    boolean isPrime = true;
    int x = sc.nextInt();
    if (x > 1)
    {
    for (int i = 2; i * i <= x; i ++)
    {
    if (x % i == 0)
    {
    isPrime = false;
    break;
    }
    }
    }
    else
    isPrime = false;

    if (isPrime)
    System.out.printf("%d is prime\n", x);
    else
    System.out.printf("%d is not prime\n", x);

    }
    }
    }
  11. 菱形

    输入一个奇数 n,输出一个由 * 构成的 n 阶实心菱形

    输入格式

    一个奇数

    输出格式

    输出一个由 * 构成的 n 阶实心菱形。

    具体格式参照输出样例。

    数据范围

    1≤n≤99

    输入样例

    1
    5

    输出样例

    1
    2
    3
    4
    5
      *  
    ***
    *****
    ***
    *

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //曼哈顿距离
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    for (int i = 0; i < n; i ++)
    {
    for (int j = 0; j < n; j ++)
    {
    if (Math.abs(i - n / 2) + Math.abs(j - n / 2) <= n / 2)
    System.out.print('*');
    else
    System.out.print(' ');
    }
    System.out.println();
    }
    }
    }