有道难题topcoder

今天做了有道topcoder的题目,也是第一次在topcoder做题,弄了半天才知道怎么回事,比赛已经结束,可以说一下题目了,开始准备在linux下用c++写,结果开始做题发现题目在linux下有乱码,就又换到windows下做,由于windows下没有很好的编译器,就打开eclipse用java开编,题目很简单,我基本过了样例就提了。
250分的题
引用

给定一个正整数n. 你可以修改n的十进制表示中任意一位而得到另一个十进制表示的数,你修改后得到的新数需要严格小于n (这个新数可以有一些前导0).请返回按照上述要求修改后得到的数中最大的一个。

public class ChangeDigit {
	public int change(int n) {
		int a = n;
		int p = 1;
		while (a % 10 == 0) {
			a /= 10;
			p *= 10;
		}
		return n - p;
	}
}

500分的题:
引用

一个二进制序列由下面的伪代码生成:
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 class BinarySequence {
	public int getValue(int n) {
		String sequence = getSequence(n);
		return sequence.charAt(n) - '0';
	}

	private String getSequence(int n) {
		StringBuffer a = new StringBuffer();
		a.append('0');
		while (a.length() <= n) {
			StringBuffer b = new StringBuffer(a);
			for (int i = 0; i < a.length(); i++) {
				if (i - (int) Math.sqrt(i) * (int) Math.sqrt(i) < 10e-10) {
					b.setCharAt(i, (char) (1 + '0' - a.charAt(i) + '0'));
				}
			}
			a.append(b);
		}
		return a.toString();
	}
}

这个题可以打表来提高效率,我只是简单的模拟做了一下。

你可能感兴趣的:(eclipse,linux,windows,J#)