你好,我是goldsunC
让我们一起进步吧!
一些Java基础练习题
今天给大家带来一些之前我自己做过的Java基础练习题,只有题目没有答案,程序都是我自己写的,运行成功倒是成功了,不过你有更好的答案以你为准哈哈哈,程序仅供参考。
水仙花数
水仙花数是指:一个整数的各位数字的四次方之和等于该整数自身的数。
Question
:求出所有的水仙花数。
public class NarcissisticNum {
/**
* narcissistic number:水仙花数
* 各位数字的四次方和等于该数自身
*/
public static void main(String[] args) {
for (int i=1000;i<=9999;i++) {
int one = i/1000;
int two = (i-one*1000)/100;
int three = (i-one*1000-two*100)/10;
int four = i%10;
if (Math.pow(one,4)+Math.pow(two,4)+Math.pow(three,4)+Math.pow(four,4) == i)
System.out.println(i);
}
}
}
相亲数
一对相亲数是指:甲的约数之和等于乙,乙的约数之和等于甲。
Question
:求1000以内的相亲数。
public class marryNum {
/**
* 相亲数
* 求1000以内的相亲数,相亲数是满足这样的一对数:
* 甲的约数之和等于乙,乙的约数之和等于甲
*/
public static void main(String[] args) {
for (int i=1;i<1000;i++) {
int j = divSum(i);
if (i>j && divSum(j) == i) {
System.out.println(i+" "+j);
}
}
}
public static int divSum(int n) {
int sum = 0;
for (int i=1;i<n;i++) {
if (n%i == 0) {
sum+=i;
}
}
return sum;
}
}
回文串
Question
:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
public class isPalindrome {
static boolean ISPalindrome(String s){
StringBuffer compare_str = new StringBuffer();
int length = s.length();
for (int i=0; i<length; i++){
char ch = s.charAt(i);
if (Character.isLetterOrDigit(ch)){
compare_str.append(Character.toLowerCase(ch));
}
}
StringBuffer compare_str_rev = new StringBuffer(compare_str).reverse();
// 比较两个字符串相等只能用String类型对比,因为它重写了object的equals方法
// StringBuffer的equals方法只能比较两个字符串的地址即引用是否相等
return compare_str.toString().equals(compare_str_rev.toString());
}
public static void main(String[] args){
String s = "A man, a plan, a canal: Panama";
System.out.println(ISPalindrome(s));
}
}
递归乘积
Question
:编写一个递归程序求一个一维数组的所有元素的乘积。
public class arrays_multi {
static double Arrays_Mul(double[] array,int length){
if (length <= 1){
return array[0];
}else {
return Arrays_Mul(array,length-1)*array[length-1];
}
}
public static void main(String[] args){
double[] arr = new double[5];
for (int i=0; i<arr.length; i++) {
arr[i] = i + 1;
}
System.out.println(Arrays_Mul(arr,arr.length));
}
}
斐波那契数列
斐波那契(FiboNacci)数列的第一项和第二项元素为1,以后各项都是前两项的和。
Question
:编写程序分别使用递归方法和非递归方法求给定长的斐波那契数列。
public class FibNanci {
/**
* 递归方法
*/
public static int getFidoNuma(int index) {
if (index <= 0) {
return 0;
}else if ( index==1 ||index == 2) {
return 1;
}else {
return getFidoNuma(index-1)+ getFidoNuma(index-2);
}
}
/**
* 非递归方法
*/
public static int getFidoNumb(int index) {
int First = 1;
int Secend = 1;
int result = 0;
if (index<=0) {
return 0;
}else if (index == 1 || index ==2) {
return 1;
}else {
for (int i = 3;i<=index;i++) {
result = First+Secend;
First = Secend;
Secend = result;
}
return result;
}
}
public static void main(String[] args) {
System.out.println(getFidoNuma(6));
System.out.println(getFidoNumb(6));
}
}
百鸡问题
Question
:100只鸡,公鸡每只3元,母鸡每只5元,小鸡3只一元,用100元钱买了100只鸡,问每种鸡各几只。
public class ChickenProblem {
public static void main(String[] args) {
/**
* male:雄性 female:雌性
* "百鸡"问题,公鸡每只3元,母鸡每只5元,小鸡3只一元
* 100块钱买了100只鸡,问每种鸡各几只
*/
int male = 3;
int female = 5;
double LittleChicken = 1.0/3;
for (int femaleNum=1;femaleNum<=100/female;femaleNum++) {
for (int maleNum=1;maleNum<=100/male;maleNum++) {
for (int LittleNum=1;LittleNum<=100-femaleNum-maleNum;LittleNum++) {
if (female*femaleNum+male*maleNum+LittleNum*LittleChicken == 100.0)
if (femaleNum+maleNum+LittleNum == 100)
System.out.println(femaleNum+" "+maleNum+" "+LittleNum);
}
}
}
}
}
随机数概率
Question
:编程生成100个1~6之间的随机数,统计1~6之间的每个数出现的概率。
/**
* 编程生成100个1~6之间的随机数,统计1~6之间的每个数出现的概率;
* @author goldsunC
*/
public class FiveProblem {
static int randomOneSix(){
// 产生1~6之间的整数
return (int)(Math.random()*6)+1;
}
public static void main(String[] args){
// 创建一个数组存放6个数字出现的次数
int[] arrays = new int[6];
for (int i=1; i<101; i++){
int temp = randomOneSix();
arrays[temp-1] = arrays[temp-1]+1;
}
for (int i=0; i<6; i++){
// 注意强制类型转换,如果不转换的话arrays[i]是整型,两个整型相除还是整数,最后全是0
System.out.println(((double)arrays[i])/100);
}
}
}
数组反转
Question
:从键盘上输入10个数,并放入一个一维数组中,然后将其前5个元素与后五个元素对换,即:;第1个与第10个元素互换,第2个与第9个元素互换,…,第5个与第6个对换,分别输出数组原来各元素的值和对换后各元素的值。
public class ElementsChange {
/**
* 从键盘上输入10个数,并放入一个一维数组中,然后将其前5个元素与后五个元素对换,
* 即:;第1个与第10个元素互换,第2个与第9个元素互换,......,第5个与第6个对换,
* 分别输出数组原来各元素的值和对换后各元素的值。
*/
public static void main(String[] args) throws IOException {
String str;
int num;
//存放整数的数组
int[] array = new int[10];
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
for (int i=0;i<10;i++) {
System.out.println("请输入一个数:");
str = read.readLine();
num = Integer.parseInt(str);
array[i] = num;
}
System.out.println(Arrays.toString(array));
for (int position=0;position<array.length/2;position++) {
change(array, position);
}
System.out.println(Arrays.toString(array));
}
static void change(int[] array,int position) {
int length;
int temp;
length = array.length-1;
temp = array[position];
array[position] = array[length-position];
array[length-position] = temp;
}
}