UVa213 Message Decoding
欢迎扫码关注微信公众号

传送门:https://vjudge.net/problem/UVA-213
真的是感觉自己好垃圾,就这样的题竟然抠了一下午,最后发现导致程序错误的只是一对小括号,简直要抓狂了。。。
这道题的难度之一是输入的方式,需要自己设计一个read_code函数来接收多行输入,另一个需要解决的问题就是key和原字符的匹配,即设计match函数,要想一一对应,必须要唯一标识key值,这里可以用一个二维数组完美解决,key[digit_capacity][value] = char
另外要注意原字符串的输入可能包含空格,可以用上面的read_code函数来解决。
#include
#includeint match_code[8][129];
int read_char();
int read_code(int);
int get_code();int main() {memset(match_code, 0, sizeof(match_code));while(read_char()) { int value;int len;for(;;) {len = read_code(3);if(len == 0) break; for(;;) {value = read_code(len);if(value == (1 << len) - 1) break;printf("%c", match_code[len][value]);}}printf("\n");memset(match_code, 0, sizeof(match_code));getchar(); //不加这个getchar(),最后一组总是输不出来结果}return 0;
} int read_char() {for(int i = 1; i < 8; i++) for(int j = 0; j < (1 << i) - 1; j++) {int ch = getchar();if(ch == EOF) return 0;if(ch == '\n' || ch == '\r') return 1;match_code[i][j] = ch; }return 1;
}int read_code(int c) {int sum = 0;while(c--) {sum += (1 << c) * (get_code() - '0');} return sum;
}int get_code() {for(;;) {int ch = getchar();if(ch != '\n' && ch != '\r') return ch;//在碰到换行符前,一直接收}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
