数据结构—绪论作业
1、从一组N个数中确定其中的第k个最大者的问题称为选择问题(selection problem),请编写一个程序解决选择问题。要求使用泛型。
泛型,泛型,泛型。。
/*
* 绪论作业
* 1、从一组N个数中确定其中的第k个最大者的问题称为选择问题(selection problem),请编写一个程序解决选择问题。要求使用泛型。
*/
package Test1;
class Selection <T>{
<T extends Number>Number select(T number[],int k){
for(int i=0;i<number.length;i++){
for(int j=0;j<number.length-1;j++){
if(((Number)number[j]).doubleValue()<((Number)number[j+1]).doubleValue()){
Object temp;
temp=number[j+1];
number[j+1]=number[j];
number[j]=(T)temp;
}
}
}
return number[k-1];
}
}
public class Test1_1 {
public static void main(String[] args){
Number number[] = {3,5,2.0,5.3,100,23};
Selection<Number> select= new Selection<Number>();
int k=3;
System.out.println(select.select(number, k));
}
}
2.编写一个递归方法,它返回数N的二进制表示中1的个数。利用这样的事实:如果N是奇数,那么其1的个数等于N/2的二进制表示中1的个数加1
分析一下,偶数的二进制表示,最后一位一定是0,奇数最后一位是1。所以偶数N二进制表示中1的个数 和 N/2 是一样的,奇数N二进制表示中1的个数 和 N/2 + 1相等,0的二进制表示中1的个数是0;
然后递归就行了。
/*
* 绪论作业
* 2.编写一个递归方法,它返回数N的二进制表示中1的个数。利用这样的事实:如果N是奇数,那么其1的个数等于N/2的二进制表示中1的个数加1
*/
package Test1;
import java.util.*;
class SumOfBinary{
int sumOfBinary(int n){
if(n<0)
n=-n;
if(n==0){
return 0;
}
else if(n%2!=0){
return sumOfBinary(n/2)+1;
}
else{
return sumOfBinary(n/2);
}
}
}
public class Test1_2 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
SumOfBinary sumofbinary = new SumOfBinary();
int num=input.nextInt();
input.close();
System.out.println(num+"二进制表示中1的个数是:"+sumofbinary.sumOfBinary(num));
}
}