Consider a string set that each of them consists of {0, 1} only. All strings in the set have the same number of 0s and 1s. Write a program to find and output the K-th string according to the dictionary order. If such a string doesn’t exist, or the input is not valid, please output “Impossible”. For example, if we have two ‘0’s and two ‘1’s, we will have a set with 6 different strings, {0011, 0101, 0110, 1001, 1010, 1100}, and the 4th string is 1001.
The first line of the input file contains a single integer t (1 ≤ t ≤ 10000), the number of test cases, followed by the input data for each test case.
Each test case is 3 integers separated by blank space: N, M(2 <= N + M <= 33 and N , M >= 0), K(1 <= K <= 1000000000). N stands for the number of ‘0’s, M stands for the number of ‘1’s, and K stands for the K-th of string in the set that needs to be printed
as output.
For each case, print exactly one line. If the string exists, please print it, otherwise print “Impossible”.
3 2 2 2 2 2 7 4 7 47
0101Impossible01010111011
package Kthstring; import java.io.BufferedInputStream; import java.util.Scanner; public class Main { public static int jc(int n) { if (n > 1) return n * jc(n - 1); else return 1; } public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int num = cin.nextInt(); cin.nextLine(); int tem = 0; while (tem < num) { int n = cin.nextInt(); int m = cin.nextInt(); int t = cin.nextInt(); int total = jc(n + m) / jc(n) / jc(m); if (total < t) System.out.println("Impossible"); else { int count = 1; int a = (int) (Math.pow(2, m) - 1); String s = Integer.toBinaryString(a); while (count < t) { a = a + 1; s = Integer.toBinaryString(a); int i = 0; for (int j = 0; j < s.length(); j++) { char c = s.charAt(j); if (c == ‘1‘) i++; } if (i == m) count++; } for (; s.length() < (n + m);) s = "0" + s; System.out.println(s); } tem++; } } }
微软2014实习生及秋令营技术类职位在线测试-题目2 : K-th string,布布扣,bubuko.com
微软2014实习生及秋令营技术类职位在线测试-题目2 : K-th string
原文:http://blog.csdn.net/lsp1991/article/details/23555447