LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 711|回复: 3

[求助]问大家个问题....

[复制链接]
发表于 2007-1-30 22:40:16 | 显示全部楼层 |阅读模式
假设有个整形数组a[]
int a[]={1,3,4,5,7,8,10};

怎么才能知道这个数组a[]中缺少1到10中的哪些数??

本人愚昧想了很久想不出来如何下手……
发表于 2007-1-30 22:53:28 | 显示全部楼层
赋值的时候是按顺序赋值的,也就是说
a[]={1,3,4,5,7,8,10}少了后三项的值,a[8],a[9],a[10]这三项里为空!~
赋值时要是想给a[1]赋完,再给a[3]赋值可以用a[]={1,,3,}用逗号格!~~
回复 支持 反对

使用道具 举报

发表于 2007-1-30 23:57:26 | 显示全部楼层
第一种
计算数组的前一位与当前为的差值,同时打印出当前位,就可以知道两个数组两个位间有多少个数相差了,由于每次都printf出来当前位,就可以解决最后一位到问题。如果觉得这样还不满意,可以对最后一位及第一位做如下处理,第一位和1相减,最后位和10相减,就可以知道了


例如数组a[]={1,3,4,6,9}
1.数组第一位 a[0]-1 结果只可能是>=0,如果为0,第一位则为1,因为是顺序排列的,所以如果差值位N,那么1-10就可以判断出少N个数了,并且知道当前位的值了
2.然后a[1]-a[0]=X,同上理也可以知道了
3.最后判断最后一位a[n-1]-10=X X只可能<=0,同样也可以知道结果

这个方法有点土就是了


第二种
如果只是1-10,那么在造一个数组,b[10](可以将数组初始化为全部都是0);
根据a[]的每一位的值位b[10]的来赋值
情况如下if(a=n) then b[n-1]=1,循环a[]数组的长度后,计算b[10]数组中值非1的位置,就可以了


例如:a[]={1,3,6,8,9},假设b[10]={0,0,0,0,0,0,0,0,0,0}
那么根据上面的方法最后b[]={1,0,1,0,0,1,0,1,1,0},最后打印出为零的位数(+1)就可以了

一时间只想到了两个,而且是很土到两个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-31 23:29:30 | 显示全部楼层
嘎嘎,谢谢两位!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表