求最小码距(完整版)

周边商城 2025-11-25 21:12:30 5614

计算机组成原理老师给小明出了一道求最小码距的题目,有以下由1个字节组成的合法编码集{0xA9,0xC7,0xDF,0xBE},该编码集的最小码距是__

小明知道码距,也知道最小码距的概念。码距是指信息编码中,两个合法编码对应位上编码不同的位数,比如10101和00110从第1位开始依次有第1位、第4、第5位不同,因此码距为3**,任意组合的码距最小值称为最小码距。 小明想借助计算机帮忙自己算出答案,今后无论老师出何种组合,他都能一键运行答案,于是他开始了最小码距的代码编写。

输入格式:

第一行读入1个整数N(2≤N≤8),代表需要输入的编码个数。 第二行输入N个编码(用十六进制表示,编码位数≤8),中间用空格隔开。

输出格式:

1.根据用户输入编码的顺序依次进行比较,每一行两两编码间的码距以及具体哪几位不一样(最低位为第1位) 输出有两种格式: (1)当码距>0时,需要输出具哪几位不一样(如:0x2 0x1 CD:2,bit:1|2|) (2)当码距=0时,只需要输出前半段(如0x2 0x2 CD:0) 2.最后一行数据输出最小码距 3.其他要求:输出所有编码时都需要加前缀0x,如0x0 输入样例: 在这里给出一组输入。例如:

4

0xa9 0xc7 0xdf 0xbe

6

0xa9 0xc7 0xdf 0xbe 0xbe 0x0

输出样例:

在这里给出相应的输出。例如:

0xa9 0xc7 CD:5,bit:2|3|4|6|7|

0xa9 0xdf CD:5,bit:2|3|5|6|7|

0xa9 0xbe CD:4,bit:1|2|3|5|

0xc7 0xdf CD:2,bit:4|5|

0xc7 0xbe CD:5,bit:1|4|5|6|7|

0xdf 0xbe CD:3,bit:1|6|7|

The MinCD is 2

0xa9 0xc7 CD:5,bit:2|3|4|6|7|

0xa9 0xdf CD:5,bit:2|3|5|6|7|

0xa9 0xbe CD:4,bit:1|2|3|5|

0xa9 0xbe CD:4,bit:1|2|3|5|

0xa9 0x0 CD:4,bit:1|4|6|8|

0xc7 0xdf CD:2,bit:4|5|

0xc7 0xbe CD:5,bit:1|4|5|6|7|

0xc7 0xbe CD:5,bit:1|4|5|6|7|

0xc7 0x0 CD:5,bit:1|2|3|7|8|

0xdf 0xbe CD:3,bit:1|6|7|

0xdf 0xbe CD:3,bit:1|6|7|

0xdf 0x0 CD:7,bit:1|2|3|4|5|7|8|

0xbe 0xbe CD:0

0xbe 0x0 CD:6,bit:2|3|4|5|6|8|

0xbe 0x0 CD:6,bit:2|3|4|5|6|8|

The MinCD is 0

参考代码:

#include

typedef long long ll;

int main(void)

{

/**

* 题目说最多会有 8 个编码位数,也就是 4 个字节

* 如果使用 int 刚好四个字节,需要考虑符号问题,数据范围开 long long

*/

int n;

ll num[10];

scanf("%d", &n);

for (int i = 0; i < n; ++i) {

// 用 %llx 读入一个 长整型的十六进制数

scanf("%llx", &num[i]);

}

// 用 ans 记录 最小码距

int ans = 100;

for (int i = 0; i < n; ++i) {

for (int j = i + 1; j < n; ++j) {

// 每次取出两个数,用 a,b 记录

// bit 数组 记录 二进制不相同的位置

ll a = num[i], b = num[j];

int idx = 0, bit[100], cnt = 1;

while (a > 0 || b > 0) {

if ((a & 1) != (b & 1)) {

bit[idx++] = cnt;

}

a >>= 1;

b >>= 1;

++cnt;

}

// 按要求输出两个数以及两个数不相同的位置

if (ans > idx) ans = idx;

printf("0x%llx 0x%llx CD:%d", num[i], num[j], idx);

// 这里需要特判一下,如果两个数相等,就不需要输出后面的 bit 了

if (idx) printf(",bit:");

for (int k = 0; k < idx; ++k) {

printf("%d|", bit[k]);

}

printf("\n");

}

}

printf("The MinCD is %d", ans);

return 0;

}

站点统计