下面贴出两次初赛题,望大家给出好的解法!
1.
Problem Statement    
 已知除数集合divisors,K阶可分数是指一个正整数恰好可以被集合divisors中K个数字整除。
 返回闭区间[A, B]中最大的K阶可分数。如果该区间不存在这样的数,返回-1。
public int findLargest(int[] divisors, int K, int A, int B)
2.
Problem Statement   
 一个二进制序列由下面的伪代码生成:
 String A = "0"
 While (A的长度小于等于n)
 创建一个和A一样长度的字符串B
 For i=0,1,...length(A)-1
 If (i 是完全平方数)
 B[i] = 1-A[i]
 Else
 B[i] = A[i]
 令A = A + B (即将B拼接在A后面)
 End While
 Return A
 请注意,在上面的伪代码中,A[i]和B[i]分别表示字符串A和B中下标为i的字符(下标编号从0开始)。对“完全平方数”的定义是,对于整数i,存在整数j,使得i= j *j,则称i为完全平方数。
 下面具体说明序列生成的过程:如果n=7,则在每一轮迭代中,A的取值依次为:0, 01, 0110, 01101010,所以最终产生的二进制序列就是0,1,1,0,1,0,1,0
 请返回上述序列中下标为n的数字(该序列的下标从0开始)public int getValue(int n)

解决方案 »

  1.   

    1.public int findLargest(int[] divisors, int K, int A, int B) {
    if (divisors == null || divisors.length == 0 || A > B)
    return -1;
    int len = divisors.length, n = 0;
    int maxK = -1;
    while (A < B) {
    for (int i = 0; i < len; i++) {
    if (A % divisors[i] == 0)
    n++;
    else  
    continue; 
    if (n > K) {
    A++;
    break;
    }
    }
    if (n == K) {
    if (A > maxK)
    maxK = A;
    }
    n=0;
    A++;
    }
    return maxK; }
    2.public int getValue(int n) {
    StringBuffer A = new StringBuffer("0");
    while (A.length() <= n) {
    StringBuffer B = new StringBuffer("0");
    for (int i = 0; i < A.length() - 1; i++)
    if (Math.sqrt(i) % 1 == 0)
    B.append(1 - (A.charAt(i)-'0'));
    else
    B.append(A.charAt(i)-'0');
    A.append(B);
    }
    return A.charAt(n)-'0';
    }第2题不大明白!