1、递归算法题
一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来。
例:n=1237
则输出为:
1237,
2474,
4948,
9896,
9896,
4948,
2474,
1237,
提示:写程序时,先致谢按递增方式的代码,写好递增的以后,再增加考虑递减部分。
public class Recursion2 {
private static void doubleNumber(int number){
System.out.println(number);
if(number<=5000) doubleNumber(number * 2);
System.out.println(number);
}
public static void main(String[] args) {
Recursion2.doubleNumber(20);
}
}
2、递归算法题
第1个人10岁,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
public class Recursion {
//第1个人10岁,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
private static int getAge(int number){
if(number == 1)return 10;
return getAge(number-1)+2;
}
public static void main(String[] args) {
System.out.println(Recursion.getAge(8));
}
}
3、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码:
public class QuickSort {
public void quickSort(String[] strDatas, int left, int right) {
String middleNumber, tempData;
int i = left, j = right;
middleNumber = strDatas[(i + j) / 2];
do {
while (strDatas[i].compareTo(middleNumber) < 0 && i < right)
i++; // 找出左边比中间值大的数
while (strDatas[j].compareTo(middleNumber) > 0 && j > left)
j--; // 找出右边比中间值小的数
if (i <= j) { // 将左边大的数和右边小的数进行替换
tempData = strDatas[i];
strDatas[i] = strDatas[j];
strDatas[j] = tempData;
i++;
j--;
}
} while (i <= j); // 当两者交错时停止
if (i < right) {
quickSort(strDatas, i, right);
}
if (j > left) {
quickSort(strDatas, left, j);
}
}
public static void main(String[] args) {
String[] strVoid = new String[] { "11", "66", "22", "0", "55", "22","0", "32" };
QuickSort sort = new QuickSort();
sort.quickSort(strVoid, 0, strVoid.length-1);
for (int i = 0; i < strVoid.length; i++) {
System.out.print(strVoid[i] + " ");
}
}
}
4、有数组a[n],用java代码将数组元素顺序颠倒
public class SwapDemo {
//有数组a[n],用java代码将数组元素顺序颠倒
//for(int i=0,int j=a.length-1;i<j;i++,j--)是否等效于 for(int i=0;i<a.length/2;i++)呢?
public static void swap1(int a[]){
int len = a.length;
for(int i=0;i<len/2;i++){
int tmp = a[i];
a[i] = a[len-1-i];
a[len-1-i] = tmp;
}
}
public static void swap2(int a[]){
int len = a.length;
for(int i=0,j=len-1;i<j;i++,j--){
int tmp = a[i];
a[i] = a[j-i];
a[j-i] = tmp;
}
}
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4};
SwapDemo.swap1(a);
// SwapDemo.swap2(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
}
}
5.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
public class Convert {
private static final char[] data = new char[]{ '零', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖' };
private static final char[] units = new char[]{ '元', '拾', '佰', '仟', '万',
'拾', '佰', '仟', '亿' };
// 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
public static String convert(int money) {
StringBuffer sbf = new StringBuffer();
int unit = 0;
while (money != 0) { //110
System.out.println("unit--->:" + unit);
sbf.insert(0, units[unit++]);
System.out.println("sbf--->:" + sbf.toString());
int number = money % 10;
System.out.println("number--->" + number);
sbf.insert(0, data[number]);
System.out.println("sbf---->:" + sbf.toString());
money /= 10;
System.out.println("money---->:" + money);
}
// 去零代码
String result = sbf.toString().replaceAll("零[拾佰仟]", "零")
.replaceAll("零+万", "万").replaceAll("零+元", "元")
.replaceAll("零+", "零");
// System.out.println("sbf.reverse:" + sbf.reverse().toString());
//sbf.reverse()--->反正字符串
System.out.println(sbf.toString());
return result;
}
public static void main(String[] args) {
System.out.println(Convert.convert(110));
}
}