题目描述
设某汉字由 N×N 的 0 和 1 的点阵图案组成。
我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个 0,第二个数表示接下来连续有几个 1,第三个数再接下来连续有几个 0,第四个数接着连续几个 1,以此类推……
例如: 以下汉字点阵图案:(来源题目列表 - 洛谷)
0001000
0001000
0001111
0001000
0001000
0001000
1111111
对应的压缩码是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7(第一个数是
N ,其余各位表示交替表示0和1 的个数,压缩码保证 N×N= 交替的各位数之和)
输入格式
汉字点阵图(点阵符号之间不留空格)。
输出格式
输出一行,压缩码。
输入输出样例
输入 #1复制
0001000 0001000 0001111 0001000 0001000 0001000 1111111
输出 #1复制
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
说明/提示
数据保证,3≤N≤200。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String firstarr = scan.next();//先接收一个字符串,计算长度;
int leng = firstarr.length();
String[] arr = new String[leng];
arr[0] = firstarr;//方便后续字符串循环
for (int i = 1; i <= leng - 1; i++) {
arr[i] = scan.next();
}
System.out.print(leng);//注意首次输出要写在接收字符串后面,不然最后的字符串将不被读取
char a, b = '0';
int count = 0;
for (int i = 0; i < leng; i++) {
for (int j = 0; j < leng; j++) {
a = arr[i].charAt(j);
if (a == b) {
count++;
} else {
System.out.print(" " + count);
count = 1;
b = a;
}
}
}
System.out.println(" " + count);//最后没有反转,即没有输出最后的数量
}
}
这题虽然看起来简单,但我在做的时候,报错了好几次,基本上全是输入处的代码报错,这个san.next()和san.next().charAt(0),都是一次性接受一行字符串,第二个只是接收第一个字符,
后面字符全弃掉了,所以这题不能用第二个只能用第一个接收。除此之外就是上面说的要在字符
串全部接收完,再输出。
否则的话最后一行字符串就无效了(错误示范:第10行代码放到第5行)