您的位置:首页 > 理论基础

厦大计算机系Java程序设计实验(一)

2018-01-19 15:47 731 查看
习题1 数字金字塔
题目描述:输入一个正整数n(n<16),输出一个如图的数字金字塔(下图是当n=7的输出)。不考虑输入错误的情形。要求使用Scanner作为输入,System.out.print作为输出。


解题思路:先由用户输入行数n。对于第i行,1≤i≤n,其行前空格数为n-i。接着从i输出至1再输出至i即可。
源代码:import java.util.Scanner;

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

/*输入n*/
System.out.print("请输入整数n:");
n = input.nextInt();

/*输出数字三角形*/
for(int i = 1;i <= n;++i)
{
int j;
for(j = 1;j <= n - i;++j)//输出行前空格
{
System.out.print(" ");
}
for(j = i;j >= 1;--j)//递减输出从i至1
{
System.out.print(j + " ");
}
for(j = 2;j <= i; ++j)//递增输出从2至i
{
System.out.print(j + " ");
}
System.out.print("\n");
}
}
}
测试样例:请输入整数n:7
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
习题2 PI的近似值
题目描述:使用下式计算PI的近似值并显示。其中i的值由用户输入。要求使用JOptionPane.showInputDialog作为输入,JOptionPane.showMessageDialog作为输出。


解题思路:对于每一次迭代,都将这一项前的符号同上次颠倒,然后计算这一项的值,其中分母为2i-1,然后加到总和上,最后再乘以4即可。
源代码:import javax.swing.JOptionPane;

public class Test
{
public static void main(String[] args)
{
int iterationNumber = 0;
String iterationNumberString = null;

iterationNumberString = JOptionPane.showInput
4000
Dialog("请输入迭代次数");
iterationNumber = Integer.parseInt(iterationNumberString);

double pi = 0, term = 0, sign = 1;

for(int i = 1;i <= iterationNumber;++i)
{
term = sign * 1 / (2 * i - 1);
sign = -sign;
pi += term;
}
pi = 4 * pi;

JOptionPane.showMessageDialog(null, "π的值为" + pi);
}
}
测试样例




习题3  回文素数
题目描述:回文素数指某一个数既是回文数、又是素数,例如2,3,5,7,11,101,131,…编程找出前100个回文素数,并且要求按照每行10个的格式输出。输出方式任选。
解题思路:从2开始一一判断该数是否同时为回文数和素数,并存储在一个数组中,最后按照格式要求一并打印。
对于回文数,则取出数字的每一位,并逆向重组,判断其与原数是否一致。
对于素数,则检查其是否存在位于2至的因子,若有则为合数,反之为素数。
源代码:import javax.swing.JOptionPane;

public class Test
{
public static boolean isReverse(int number)
{
int[] bits = new int[6];
int lengthOfBits = 0;
int reverseNumber = 0;
int timesOfTen = 1;
int temp = number;

while(temp > 0)
{
bits[lengthOfBits++] = temp % 10;
temp /= 10;
}

for(int i = lengthOfBits - 1;i >= 0; --i)
{
reverseNumber += bits[i] * timesOfTen;
timesOfTen *= 10;
}

if(reverseNumber == number)
return true;
else
return false;
}

public static boolean isPrime(int number)
{
int i = 0;
boolean isPrime = true;

for(i = 2;i * i <= number;++i)
{
if(number % i == 0)
{
isPrime = false;
break;
}
}

return isPrime;
}

public static void main(String[] args)
{
int[] reversePrime = new int[101];
int countOfReversePrime = 0;
int number = 2;

while(countOfReversePrime < 100)
{
if( (isReverse(number) == true) && (isPrime(number) == true) )
reversePrime[countOfReversePrime++] = number;
++number;
}

for(int i = 0;i < 10;++i)
{
for(int j = 0;j < 10;++j)
{
System.out.print(reversePrime[10 * i + j] + " ");
}
System.out.print("\n");
}
}
}
测试样例:输出结果为:2 3 5 7 11 101 131 151 181 191
313 353 373 383 727 757 787 797 919 929
10301 10501 10601 11311 11411 12421 12721 12821 13331 13831
13931 14341 14741 15451 15551 16061 16361 16561 16661 17471
17971 18181 18481 19391 19891 19991 30103 30203 30403 30703
30803 31013 31513 32323 32423 33533 34543 34843 35053 35153
35353 35753 36263 36563 37273 37573 38083 38183 38783 39293
70207 70507 70607 71317 71917 72227 72727 73037 73237 73637
74047 74747 75557 76367 76667 77377 77477 77977 78487 78787
78887 79397 79697 79997 90709 91019 93139 93239 93739 94049
习题4  数组合并
题目描述
写一个合并数组的方法,将两个已排序的数组合并成一个有序的大数组。方法的原型如下:
public static int[] merge(int[] list1, int[] list2)
要求提供一个测试的main函数,让用户输入两个数组的大小及元素值,最后调用上述方法并输出合并结果。
输入输出方式任选。
解题思路:从两个表的头开始扫描,如果list1[i]<list2[i],则放入list1[i],否则放入list2[i]。假如扫描完某一个表后还有一个表没有扫描完毕,则将未归并的元素一一复制进来即可。
源代码:import java.util.Scanner;

public class Test
{
public static int[] merge(int[] list1, int[] list2)
{
int[] mergeArray = new int[list1.length + list2.length];
int length1 = 0, length2 = 0, length = 0;

while( length1 < list1.length && length2 < list2.length)
{
if( list1[length1] < list2[length2] )
{
mergeArray[length++] = list1[length1];
++length1;
}
else
{
mergeArray[length++] = list2[length2];
++length2;
}
}
while( length1 < list1.length )
{
mergeArray[length++] = list1[length1];
++length1;
}
while( length2 < list2.length )
{
mergeArray[length++] = list2[length2];
++length2;
}
return mergeArray;
}

public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int length1 = 0, length2 = 0;

length1 = input.nextInt();
int list1[] = new int[length1];
for(int i = 0;i < length1;++i)
{
list1[i] = input.nextInt();
}

length2 = input.nextInt();
int list2[] = new int[length2];
for(int i = 0;i < length2;++i)
{
list2[i] = input.nextInt();
}

int list[] = new int[list1.length + list2.length];
list = merge(list1,list2);
for(int i = 0;i < list.length;++i)
{
System.out.print(list[i] + " ");
}
System.out.print("\n");
}
}
测试样例
输入:2 1 5 3 2 5 10
输出:1 2 5 5 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: