目录
一、求闰年
编写程序显示x~y年中所有的闰年,x, y从键盘输入。
【问题描述】输入两个年份,输出两个年份之间的所有闰年。
提示:能被4整除却不能被100整除 或 能被400整除的年份是闰年
【输入形式】两个年份,用空格分隔
【输出形式】两个年份之间的所有闰年,每个闰年用空格隔开
表1.1 实验题目1的测试用例
序号 | 样例输入 | 样例输出 |
1 | 2011 2021 | 2012 2016 2020 |
//求闰年
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int a,b;
a = sc.nextInt();
b = sc.nextInt();
for (int i = a; i <= b; i++) {
if (i%4==0&&i%100!=0||i%400==0){
System.out.print(i+" ");
}
}
}
}
运行结果:
2011 2021
2012 2016 2020
进程已结束,退出代码0
二、孪生素数问题
【问题描述】
素数(质数)指的是不能被分解的数,除了1和它本身之外没有其他数能够整除。如果两个素数之差为2,则这两个素数就是孪生素数,例如3和5为孪生素数,5和7为孪生素数。从键盘输入一个小于100的正整数n,找出n-100之间的所有孪生素数。
【输入形式】一个正整数n(n<100)
【输出形式】输出互为孪生素数的两个数,每对1行,用空格隔开。
表1.2实验题目2测试用例
序号 | 样例输入 | 样例输出 |
1 | 20 | 29 31 41 43 59 61 71 73 |
【样例说明】
第1行表示29和31为孪生素数
第2行表示41和43为孪生素数
//孪生素数
import java.util.ArrayList;
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> arr = new ArrayList<Integer>();
int n = sc.nextInt();
for (int i = n; i < 100 ; i++) {
if (ifprime(i)){
arr.add(i);
}
}
for (int i = 0; i < arr.size()-1; i++) {
if (arr.get(i+1)-arr.get(i)==2){
System.out.print(arr.get(i)+" ");
System.out.println(arr.get(i+1));
}
}
}
static boolean ifprime(int a){
for (int i = 2; i <= Math.sqrt(a); i++) {
if (a%i==0){
return false;
}
}
return true;
}
}
运行结果:
20
29 31
41 43
59 61
71 73进程已结束,退出代码0
文章引用:
(1条消息) int与Integer区别及应用场景_int和interger的区别_朝雨伊轻尘的博客-CSDN博客
三、完全数问题 Perfect Number
【问题描述】
完全数,又称为完美数或完备数,是一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,第一个完全数是6,它的约数1、2、3、6,去除它本身6外,其余3个数相加,1+2+3=6.第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。从键盘输入一个正整数n,编程求1~n以内的完全数。
【输入形式】一个正整数n(不超过10000)
【输出形式】
输出1~n以内的完全数,并输出每个完数的真因子。完数及各真因子之间用空格隔开,一个完数一行
表1.3 实验题目3测试用例
序号 | 样例输入 | 样例输出 |
1 | 100 | 6 1 2 3 28 1 2 4 7 14 |
【样例说明】
一个完数及其真因子占一行,第一行输出表示6为完数,1 2 3是它的真因子
//perfect number
import java.util.Scanner;
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 (ifperfect(i)){
System.out.print(i+" ");
priDivisor(i);
}
}
}
public static boolean ifperfect(int i) {
int sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0){
sum += j;
}
}
return sum == i;
}
public static void priDivisor(int i) {
for (int j = 1; j < i; j++) {
if (i % j == 0){
System.out.print(j + " ");
}
}
System.out.println();
}
}
运行结果:
100
6 1 2 3
28 1 2 4 7 14进程已结束,退出代码0
四、 求两组整数的异或集和交集
【问题描述】
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),求两组整数的异或集(合并两组整数,去掉在两组整数中都出现的整数后形成的集合)和交集(在两组整数中都出现的整数形成的集合),并按从大到小顺序排序输出。
【输入形式】
首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上输入第二组整数,以一个空格分隔。两行最后一个整数后没有空格,只有回车换行。
【输出形式】
先按从大到小顺序排序输出两组整数的异或集(以一个空格分隔各个整数,最后一个整数后也有一个空格),然后在下一行按照从大到小的顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后也有一个空格)。若两组整数的异或集或交集为空,则相应的输出行上只输出一回车换行。
表1.4 实验题目4测试用例
序号 | 样例输入 | 样例输出 |
1 | 5 1 4 32 8 7 9 -6 5 2 87 10 1 6 | 87 32 10 9 8 7 6 4 2 -6 5 1 |
【样例说明】
第一组整数为5,1,4,32,8,7,9和-6,第二组整数分别为5,2,87,10,1和6。将第一组和第二组整数合并,并去掉在两组整数中都出现的整数5和1即可得到两组整数的异或集,并从大到小顺序排序后结果为87 32 10 9 8 7 6 4 2 -6 ;两组整数中都出现的整数5和1形成了交集,按从大到小的顺序输出为:5 1 。
//交集 异或集
import java.util.*;
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入两行数据
String t = sc.nextLine();
String[] arr1 = t.split(" ");
//System.out.println(Arrays.toString(arr1));
//第二行
t = sc.nextLine();
String[] arr2 = t.split(" ");
ArrayList<String> t_arr1 = new ArrayList<>();//交集
//找交集
for (String temp0 :
arr1) {
for (String temp1 :
arr2) {
if (temp0.equals(temp1)){
t_arr1.add(temp0);
break;
}
}
}
//找异或集
ArrayList<String> t_arr2 = new ArrayList<>();//异或集
t_arr2.addAll(Arrays.asList(arr1));
t_arr2.addAll(Arrays.asList(arr2));
//System.out.println("并集:");
//System.out.println(Arrays.toString(t_arr2.toArray()));
for (String temp :
t_arr1) {
t_arr2.remove(temp);
t_arr2.remove(temp);
}
//转整数来排序 字符串不好排
//异或集降序输出
toint_out(t_arr2);
//交集输出
toint_out(t_arr1);
}
//转成整数再输出的方法
private static void toint_out(ArrayList<String> t_arr) {
//转成整数
Integer[] t_arr1 = new Integer [t_arr.size()];//
for (int i = 0; i < t_arr.size(); i++) {
t_arr1[i] = Integer.parseInt(t_arr.get(i));
}
//降序
Arrays.sort(t_arr1,Collections.reverseOrder());
//输出
for (int value :
t_arr1) {
System.out.print(value+" ");
}
System.out.println();
}
}
代码运行:
5 1 4 32 8 7 9 -6
5 2 87 10 1 6
87 32 10 9 8 7 6 4 2 -6
5 1进程已结束,退出代码0
涉及文章:
(1条消息) String类的split方法,字符串分割成数组_string分割成数组_Bworry的博客-CSDN博客
(1条消息) JAVA中判断两个字符串是否相等_komorebi-JCE的博客-CSDN博客
在Java中对字符串数组进行排序 (techiedelight.com)
Java 数组排序——如何使用 Arrays.sort() 升序或降序排列数组 (freecodecamp.org)
(1条消息) Java中Array、List、ArrayList的区别_list和array list区别_wiidi的博客-CSDN博客
Java ArrayList addAll() 方法 | 菜鸟教程 (runoob.com)
(2条消息) Java中String类型数组转换为int类型数组_javastring数组转int数组_初Q,的博客-CSDN博客
鸣谢:
感谢舒振宇老师。我当时求异或集是用定义。在他启发之后,现在是数学方法求异或集:并集 - 交集 = 异或集(要除去并集中含有交集的所有元素),方便很多。
五、回文数
【问题描述】
键盘输入一个1-99999之间的整数,编程判断这个数字是几位数,并且判断该数是否是回文数。回文数指的是该数逆序排列后得到的数和原数相同。例如12321、3223 都是回文数,12312不是回文数。
【输入形式】输入任意一个1-99999之间的整数
表1.5实验题目5测试用例
序号 | 样例输入 | 样例输出 |
1 | 12421 | please input 1-99999 number 12421 is a palindrome number |
//回文数
import java.util.ArrayList;
import java.util.Scanner;
class Main{
public static void main(String[] args) {
System.out.println("please input 1-99999 integer number");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int n0 =n;
ArrayList<Integer> arr = new ArrayList<>();
while (n!=0){
arr.add(n%10);
n/=10;
}
//System.out.println(Arrays.toString(arr.toArray()));
System.out.println(n0+" is "+arr.size()+" bit");
int i;
for ( i = 0; i <= arr.size() / 2; i++) {
if (arr.get(i) != arr.get(arr.size()-1-i)){
break;
}
}
if (i == arr.size()/2 +1){
System.out.println(n0+" is a palindrome number");
}
else {
System.out.println(n0+" is not a palindrome number");
}
}
}
代码运行:
please input 1-99999 integer number
12421
12421 is 5 bit
12421 is a palindrome number进程已结束,退出代码0
附录(Java上机实验课要求):
Java语言实验将于下周开始,请同学们注意:
1. 严格按课表时间进行实验;
2. 按要求撰写实验预习报告:
预习报告内容包括:
(1) 题号(实验题目提前在学习通中发布);
(2) 程序(不要求事先必须运行通过,上机时调试、提交,程序代码请务必亲自敲);
(3) 程序需要测试的数据及对应的预期结果(非老师给的测试数据,自行准备至少一组),该项在该次预习成绩中占5分
(4) 注意程序的代码风格,该项在该次预习成绩中占5分;
预习报告一般不允许提交电子档或打印稿。如想申请提交电子档:(1)上学期C语言成绩≥90;(2)需事先向任课老师申请,考核通过后方可。
实验指导老师上机时检查预习报告的完成情况,并进行评分,该分将计入上机实验成绩,并纳入课程总评成绩。
3. 上机时先在IDE(集成开发环境)下运行程序,运行结果正确后才能在希冀大数据实验平台(CGOJ http://192.168.122.231 )中提交。
预习报告本不限,自行选择练习本。
尾声:
文章仅供学习交流,若有更好的解法欢迎分享。
若有不足,敬请斧正。