Hamming Codes
来源:互联网 发布:java 的remainder 编辑:程序博客网 时间:2024/05/15 06:38
题意:按照从小至大的顺序输出N个B位的数,每个数与其他的数之间的Hamming距离至少为D。如果有多解,你的程序要输出这样的解:假如把它化为2^B进制数,它的值要最小。
解题思路:
- 读入输入
- 建立一个数组用来保存满足条件的序列,首先加入0这个数
- 从1开始遍历到2^B
- 对每个遍历到的数,检查其与数组中已经存在的所有数的Hamming距离(两个数XOR的结果中1的个数即为Hamming距离),满足条件则将其加入数组
- 遍历过程中,一旦数组中加入的数量达到N,则结束遍历
- 输出结果
代码:
/*ID: zc.rene1LANG: CPROG: hamming */#include<stdio.h>#include<stdlib.h>#include<string.h>int pow2(int num){ int ret = 1; while (num > 0) {ret *= 2;num--; } return ret;}int GetDistance(int a, int b){ int distance = 0; a = a^b; while (a > 0) {distance += (a&1);a >>= 1; } return distance;}int Check(int in, int *arr, int index, int distance){ int ret = 1, i; for (i=0; i<index; i++) {if (GetDistance(in, arr[i]) < distance){ ret = 0; break;} } return ret;}int main(void){ FILE *fin, *fout; int N, B, D; int *arr; int i, MAX, index; fin = fopen("hamming.in", "r"); fout = fopen("hamming.out", "w"); fscanf(fin, "%d %d %d", &N, &B, &D); arr = (int*)malloc(N*sizeof(int)); memset(arr, 0, N*sizeof(int)); index = 1; MAX = pow2(B); for (i=1; i<=MAX; i++) {if (Check(i, arr, index, D) == 1){ arr[index++] = i; if (index == N) {break; }} } for (i=0; i<index-1; i++) {if (i%10 != 9){ fprintf(fout, "%d ", arr[i]);}else{ fprintf(fout, "%d\n", arr[i]);} } fprintf(fout, "%d\n", arr[i]); return 0;}
- Hamming Codes
- Hamming Codes
- Hamming Codes
- Hamming Codes
- USACO 2.1 Hamming Codes (hamming)
- USACO2.1.5 Hamming Codes (hamming)
- USACO2.1.5 Hamming Codes (hamming)
- 【搜索】【USACO】Hamming Codes
- 2.1.6 Hamming Codes
- Section 2.1 Hamming Codes
- 2.1Hamming Codes
- usaco training-Hamming Codes
- Hamming Codes 海明码
- usaco Hamming Codes
- usaco2.14Hamming Codes
- USACO:Hamming Codes
- USACO-Hamming Codes
- 2.1.5---Hamming Codes
- Linux 下摄像头驱动支持情况
- 计算机广告学视频
- UIKit各类概述
- 螺旋三角剖分
- Sum Root to Leaf Numbers
- Hamming Codes
- 洋葱三角剖分
- 四边形剖分
- Python学习之路一 开发环境的配置
- 合并凸包
- Collections的使用
- html页面导入文件 使用include后多出一空白行的解决
- 找公切线
- git设置颜色