题意要求: 把整型数组中的统计的计数信息用直方图的形式打印出来.
要实现打印直方图, 我现在想到的思路如下:
1. 遍历数组, 把值大于0的打印一个符号出来
2. 重复第一步, 一直到数组的值全部等于0为止.
但是到要实现第二步的终止条件,我们可以通过比较来获取得最大的循环次数. 我这里是通过与的方式来实现的, 当数组某个下标的值等于0时,就与上0XFFFF.这样当数组的值全为0时,就可以退出循环了.代码如下:
/*
* *a: 存储统计信息的数组
* len: 数组的长度
* sign: 要打印的符号
*/
void print_histogram(int *a, int len, char sign)
{
int i, j, z;
for (j=0; j<len; j++)
{
printf("%d ", j);
}
printf("\n");
z = 1023;
do
{
for (i=0; i<len; i++)
{
if (a[i] > 0)
{
printf("%c ", sign);
a[i]--;
}
else
{
z = z & ~(((int)pow(2, i)));
printf(" ");
}
}
printf("\n");
}
while (z != 0);
}
- [assumechen] 呵呵,我把程序搞复杂了。谢谢! 07/12 23:58
- [fpamc] MOV BX,AX MOV AX,DX MOV DX,0 07/11 23:26
- [assumechen] 这个公式原来一直想不明白,总是觉得会溢出,直到看到这个贴子才转过来。 http://www.asm 07/11 21:19
- [assumechen] 谢谢! 07/11 21:16
- [fpamc] 对的。 07/09 23:04
- [assumechen] 谢谢 06/30 22:34
- [assumechen] 谢谢 06/30 22:33
- [fpamc] 对的。 06/30 10:26
- [fpamc] 恩对的, 06/30 10:24
- [assumechen] 是程序错了,把这一句: mov word ptr es:[0dH],ax ; 雇员的平 06/29 14:45