游程编码 (Run Length Encoding ) 是一种简单的编码方法,通常用于控制论中对二值图像编码。ACM有一道题目就是关于该编码。见tzu 1149 或poj 1782 。虽然是简单题,我却花了好大功夫才搞定,功力还是不足阿。
程序代码如下:
#include <stdio.h> #define MAX 1024 int printStr(char *str, int len); int main(void) { char target[MAX]; int diffCount,sameCount; char *pFirstChar, *pLastChar; while(1) { if(fgets(target,sizeof(target),stdin) == NULL) break; pFirstChar = pLastChar = target; while(*pLastChar != '\n') { diffCount = 0; sameCount = 1; /*if(*(pLastChar+1) == '\n') { printStr(pLastChar,1); pLastChar++; } else*/ if(*pLastChar == *(pLastChar + 1)) { while(*pLastChar == *(pLastChar + 1) &&sameCount <= 8) { sameCount++; pLastChar++; } printf("%d%c",sameCount,*pLastChar); pLastChar++; pFirstChar = pLastChar; } else { while(*pLastChar != '\n' && *pLastChar != *(pLastChar + 1)) { diffCount++; pLastChar++; } printStr(pFirstChar,diffCount); /* printf("\n");*/ pFirstChar = pLastChar; } } if(*pLastChar == '\n') putchar('\n'); } return 0; } int printStr(char *str, int len) { int i; putchar('1'); for(i = 0; i < len; i++) if(*(str+i) == '1') printf("11"); else putchar(*(str+i)); putchar('1'); return 0; }