B题
第一行输入一个整形数字n,接下来一共有n行,每一行都依据上一行的内容写出,上一行的0变成01,上一行的1变成10
比如输入:
4
1 1
2 1
2 2
4 5
要求输出
0
0
1
1
意思是:因为输入了4,则接下来有
0
0 1
0 1 1 0
0 1 1 0 1 0 0 1
然后看输入的接下来几行,第一个要求输出第一行第一个数字,即0,第二个要求输出第二行第一个数字,即0,第三个要求输出第二行第二个,即1,第四个要求输出第四行第五个数字, 即1;
代码实现:
package jichu1;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
@SuppressWarnings("all")
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你想输入的行数:");
int row = input.nextInt();
// 定义一个二维数组
int arr[][] = new int[row][];
for (int i = 0; i < row; i++) {
if (i == 0) {
arr[0] = new int[1];
// 给二维数组赋值:第一个一维数组的长度是1.并且赋值为0.
arr[0][0] = 0;
// 测试代码
// System.out.print("*");
} else {
for (int j = 1; j <= 2 << (i - 1); j++) {
// 按位运算给每个一维数组赋值(因为每个一维数组的长度不等,且以位增加)
arr[i] = new int[j];
// 测试代码
// System.out.print("*");
}
// 然后遍历该数组的第i-1行数据,根据第i-1行数据,给第i行数据赋值
for (int j2 = 0; j2 < arr[i - 1].length; j2++) {
// 判断第i-1的j2位置是为偶数还是奇数
// m,n奇偶数是根据一维数组的包含的元素个数来进行判断的。
int m = j2 * 2;// m代奇数
int n = j2 * 2 + 1;// n代表偶数
// 偶数的情况个数来判断的
if ((j2 + 1) % 2 == 0) {
/*
* 如果该偶数位置的值为0,那么第i行2*j2的位置就为0; 如果偶数位置的值为1,那么第i行2*j2的位置就为1;
*/
if (arr[i - 1][j2] == 0) {
arr[i][m] = 0;
arr[i][n] = 1;
} else if (arr[i - 1][j2] == 1) {
arr[i][m] = 1;
arr[i][n] = 0;
}
} else {// 奇数的情况
/*
* 如果该奇数位置的值为0,那么第i行2*j2-1的位置就为0; 如果该奇数位置的值为1,那么第i行2*j2-1的位置就为1;
*/
if (arr[i - 1][j2] == 0) {
arr[i][n] = 1;
arr[i][m] = 0;
} else if (arr[i - 1][j2] == 1) {
arr[i][n] = 0;
arr[i][m] = 1;
}
}
}
}
// 测试代码
// System.out.println();
}
// 打印输出二维数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
System.out.println("请输入你想要查询的行数和列数");
int hang = input.nextInt();
int lie = input.nextInt();
int hang1 = input.nextInt();
int lie1 = input.nextInt();
int hang2 = input.nextInt();
int lie2 = input.nextInt();
int hang3 = input.nextInt();
int lie3 = input.nextInt();
map.put(hang, lie);
map.put(hang1, lie1);
map.put(hang2, lie2);
map.put(hang3, lie3);
// 1.使用map集合中的entrySet方法,把Map集合中多个Entry对象取出来,存储到一个Set集合中
Set<Entry<Integer, Integer>> set = map.entrySet();
// 2.遍历Set集合,获取每一个Entry对象
// 使用迭代器遍历Set集合
Iterator<Entry<Integer, Integer>> iterator = set.iterator();
while (iterator.hasNext()) {
// 先获取每一个连接key和value关系的对象
Entry<Integer, Integer> entry = iterator.next();
// 获取键
Integer hangshu = entry.getKey();
// 获取值
Integer lieshu = entry.getValue();
// 对输入的数值进行判断
int var = 0;
if (hangshu > row) {
System.out.println("抱歉,你需要查询的行数超过了你输入的行数");
} else {
int length = arr[hangshu].length;
if (lieshu > length) {
System.out.println("抱歉,你需要查询的列数超过了范围");
} else {
var = arr[hangshu][lieshu];
}
}
System.out.println("你查询的值为:" + var);
}
}
}
运行截图