【大学】北理工的恶龙
就模拟,硬模拟,考察的主要是文件操作,没啥算法(kmp勉强算一个,但是emmm,这道题用了反而复杂)
代码
#include <stdio.h>
#include <string.h>
struct key{
unsigned int offset;
unsigned short size;
unsigned char K;
}table;
int main(){
char pos[20],ciph[10000];
int N,i,j = 1,s,m;
scanf("%s\n%d",pos,&N);
FILE *fp = fopen(pos,"rb");
for(i = 0;i < 5;i++)
{
fseek(fp,(N-1)*8+i*0x210,0);
fread(&(table.offset),7,1,fp);
fseek(fp,table.offset,0);
fread(ciph,table.size,1,fp);
ciph[0] += table.K;
if(ciph[0] != 'W') break;
}
while(j < table.size) ciph[j++] += table.K;
printf("XH: %02d\nSN: %.19s\nM9: %.32s\n",N,(char *)strstr(ciph,"Serial") + 12,strstr(ciph,"MD9") + 5);
}
这里用的是strstr函数,但其实自己手写一遍也可以(一定要写kmp也行)