热门

最新

红包

立Flag

投票

同城

我的

发布
qq_48946382
qq_48946382
6 年前
trueqq_48946382

求大佬解释一下从A~L个硬币中找到唯一假币的这个代码:
#include "stdio.h"
#include "string.h"
typedef enum {
even, up, down
}Res;
typedef struct {
char* l; char* r; Res v;
}Judge;
int main() {
Judge d[] = {
{"ABCD", "EFGH", even},
{"ABCI", "EFJK", up},
{"ABIJ", "EFGH", even}};
int possible[12];
int i,j;
for (i = 0; i < 12; i++) possible[i] = 1;
for (i = 0; i < sizeof(d)/sizeof(Judge); i++) {
if (d[i].v == even) {
char *s = d[i].l;
while (*s) { possible[*s-'A'] = 0; s++;}
s = d[i].r;
while (*s) { possible[*s-'A'] = 0; s++;}
}
}
for (i = 0; i < 12; i++) {
if (possible[i]) {
int match = 1;
int weight = 0;
char c = i + 'A';
for (j = 0; j < sizeof(d)/sizeof(Judge); j++) {
int p = 0;
if (d[j].v == even) continue;
if (strchr(d[j].l, c)) {
p = (d[j].v == up)?1:-1;
}
else if (strchr(d[j].r, c)) {
p = (d[j].v == up)?-1:1;
}
if (p == 0 || (weight && weight != p)) {
match = 0;
break;
}
weight = p;
}
if (match) {
printf("Find %c\n", c);
}
}
}
return 0;
}

CSDN App 扫码分享
分享
评论
3
打赏
  • 复制链接
  • 举报
下一条:
今天面试golang…让我用一条sql查询用户今日充值金额,昨日充值金额,和总金额😭怪我mysql没学好😭
立即登录