题库 信息学奥赛题库 题目列表 (格雷码,Gray Code)格雷码是对十进制数的一种二进...
组合题

(格雷码,Gray Code)格雷码是对十进制数的一种二进制编码。编码顺序与相应的十进制数的大小不一致。其特点是:对于两个相邻的十进制数,对应的两个格雷码只有一个二进制位不同。另外,最大数与最小数之间也仅有一个二进制位不同,以 4 位二进制数为例,编码如下:


如果把每个二进制的位看作一个开关,则将一个数变为相邻的另一个数,只须改动一个开关。因此,格雷码广泛用于信号处理、数-模转换等领域。


下面程序的任务是:由键盘输入二进制数的位数 n(n<16),再输入一个十进制数 m(0≤m<2n),然后输出对应于 

m 的格雷码(共 n 位,用数组 gr[] 存放)。


为了将程序补充完整,你必须认真分析上表的规律,特别是对格雷码固定的某一位,从哪个十进制数起,由 0 变为 1,或由 1 变为 0。

#include <stdio.h> main() { int bound = 1, m, n, i, j, b, p, gr[15]; printf( "input n,m\n" ); scanf( "%d%d", &n, &m ); for ( i = 1; i <= n; i++ ) bound = ①; if ( m < 0 || m >= bound ) { printf( "Data error!\n" ); ②; } b = 1; for ( i = 1; i <= n; i++ ) { p = 0; b = b * 2; for ( ③; j <= m; j++ ) if ( ④ ) p = 1 - p; gr[i] = p; } for ( i = n; ⑤ ) printf( "%1d", gr[i] );  /* 在"%1d" 中出现的是数字1,不是字母l */ printf( "\n" ); }

第 1 题 填空
第 2 题 填空
第 3 题 填空
第 4 题 填空
第 5 题 填空
题目信息
2007年 初赛
-
正确率
0
评论
47
点击