DNA序列、百万富翁问题

1.考虑下面这个简单的例子,让我们看看reflection是如何工作的。

import java.lang.reflect.*;
public class DumpMethods{
    public static void main(String[] args) {
        try {
        Class c=Class.forName(args[0]);
        Method m[]=c.getDeclaredMethods();
        for (int i = 0; i < m.length; i++) {
            System.out.println(m[i].toString());
            }
       } catch (Throwable e) {
        System.err.println(e);
    }
   }
}

其中"c.getDeclaredMethods"的作用是: D
A.取得类的公有方法对象
B.取得类的所有公有方法名称
C.取得类的所有方法对象
D.以上选项都不正确
2.java 的字符类型采用的是 Unicode 编码方案,每个 Unicode 码占用(B)个比特位。
A.8
B.16
C.32
D.64
3.有如下4条语句:©

Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);

以下输出结果为false的是:

A.System.out.println(i01==i02);
B.System.out.println(i01==i03);
C.System.out.println(i03==i04);
D.System.out.println(i02==i04);

4.标题:DNA序列
一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。
输入描述:
输入一个string型基因序列,和int型子串的长度
输出描述:
找出GC比例最高的子串,如果有多个输出第一个的子串
示例1:
输入
AACTGTGCACGACCTGA
5
输出
GCACG

import java.util.*;
public class Main{
    private static void Solution(String s,int num){
        Map<Integer,String> map = new HashMap<>();
        for(int i = 0;i<s.length()-(num-1);i++){
            String r = s.substring(i,i+num);
            int count = 0;
            for(int j = 0;j<r.length();j++){
               char ch = r.charAt(j);
                if(ch=='C'||ch=='G'){
                    count++;
                }
            }
            if(!map.containsKey(count)){
                map.put(count,r);
            }
        }
        Set<Integer> set = map.keySet();
        int max = 0;
        for(Integer t : set){
            if(t>max){
                max=t;
            }
        }
        String result = map.get(max);
        System.out.println(result);
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int num = sc.nextInt();
        Solution(s,num);
    }
}
//方法二
import java.util.*;
public class Main {
    //返回一个字符串的GC比例
    public static double GiveRatio(String str) {
        double ratio = 0;
        //这里要用double型,如果用int型,2/5的结果为0
        double count = 0;
        //用double型,原因同上
        for (char ch : str.toCharArray()) {
            if (ch == 'G' || ch == 'C') count++;
        }
        ratio = count / (double) str.length();
        return ratio;
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String dna = scan.nextLine();
        int usedSize = scan.nextInt();
        String maxStr = "";
        //记录比例最高的字符串
        double maxRatio = 0;
        //记录目前出现的最高比例
        // 注意:最后一个子串的下标是:i = dna.length() - length;
        for (int i = 0; i < dna.length() - usedSize + 1; i++) {
            //这里提取长度为length的有效数据个数。
            String str = dna.substring(i, i + usedSize);
            if (GiveRatio(str) > maxRatio) {
                maxStr = str;
                maxRatio = GiveRatio(str);
            }
        }
        System.out.println(maxStr);
    }
}

5.标题:百万富翁问题
一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你10 万元,你第
一天给我1 分钱,第二天2 分钱,第三天4 分钱……这样交换 30 天后,百万富翁交出了多少钱?陌生人交出了多少钱?(注意一个是万元,一个是分)
输入描述:
该题没有输入
输出描述:
输出两个整数,分别代表百万富翁交出的钱和陌生人交出的钱,富翁交出的钱以万元作单位,陌生人交出的
钱以分作单位。

public class Main{
    private static int Solution(int n){
        int result = 1;
        for(int i = 0;i<n;i++){
            result = result*2;
        }
        return result;
    }
    public static void main(String[] args){
        int a = 300;
        System.out.print(a+" ");
        int b = 0;
        for(int i = 0;i<30;i++){
            b = b+Solution(i);
        }
        System.out.print(b);
    }
}
//方法二
import java.lang.Math;
public class Main {
    public static void main(String[] args) {
        long sumRich = 0;
        long sumStranger = 0;
        for (int i = 1; i <= 30; i++) {
            sumRich += 10;
            //累加10(万) 
            sumStranger = sumStranger + (long) Math.pow(2, i - 1);
            //累加2的n-1次方(分) 
        }
        System.out.print(sumRich + " " + sumStranger);
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值