一个数组的数学问题,请进.

skystar008 2005-01-03 10:36:01
现在有一串用逗号分开的数字:1,2,5,6,8,10
如何用一个算法,把它没有按一递进的两个数字之间加零.相差1则加一个0以此类推.
比如上面这串的结果为:1,2,0,0,5,6,0,8,0,10
高手请帮忙~!
...全文
158 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrshelly 2005-01-03
  • 打赏
  • 举报
回复
取出最大数,
设置一个数组。让数组元素都为 "0"
再循环一次。设置出现的数字的对应的数组元素的值等于数字。
再把数组用"," 组合就成。
1,2,5,7,10

array a();
a[1]="1";
a[2]="2";
a[3]="0";
a[4]="0";
a[5]="5";
a[6]="0";
a[7]="7";
a[8]="0";
a[9]="0";
a[10]="10";
这样,这个数组再用 "," 组合就成。
1,2,0,0,5,0,7,0,0,10 了
skystar008 2005-01-03
  • 打赏
  • 举报
回复
怎么没人进来啊?晕哦~!
skystar008 2005-01-03
  • 打赏
  • 举报
回复
用PHP来实现,JS不好.
RexZheng 2005-01-03
  • 打赏
  • 举报
回复
<SCRIPT language="VBScript">
num = "1,2,5,6,8,10"
tmpnum=split(num,",")
dim arrnum
redim arrnum(tmpnum(ubound(tmpnum)))
for i=0 to ubound(arrnum)
arrnum(i)=0
next
for i=0 to ubound(tmpnum)
arrnum(tmpnum(i))=tmpnum(i)
next
msgbox(join(arrnum,","))
</SCRIPT>

写得有点乱,不过差不多就是这个意思了,定义一个数组,设array(i)的所有值为0,然后以array(i)=i这种方式赋值,i是已有的数值,再合并数组为一个字符串
Meteorlet 2005-01-03
  • 打赏
  • 举报
回复
mrshelly(Shelly)的方法看起来是没有100次循环,但是array_fill不需要循环赋值吗?赋0跟赋数字都是一样的,除非编译优化。而且用那么大的一个数组来保存结果,增加了空间复杂度。还有一点,没有通用性,如果不是整数,是小数,这样做就有问题了,而我只需要更改步长就可以,象这样:
for ($i = $num[0]; $i <= $num[sizeof($num)-1]; $i += 0.001)
mrshelly 2005-01-03
  • 打赏
  • 举报
回复
我倒。饭不要喂到嘴边嘛。只要给你食谱就成了嘛。
skystar008 2005-01-03
  • 打赏
  • 举报
回复
谢谢 Meteorlet(Meteorlet) ( ) 和 mrshelly(Shelly) ( )
mrshelly 2005-01-03
  • 打赏
  • 举报
回复
楼上的要循环 100次。
下面的不会。

<?php
$str = "1,2,5,7,100";
$num = explode(",", $str);
sort($num);
$a=array_fill(1, $num[sizeof($num)-1], '0'); //取得最大值并 把数组全赋 '0'
for($i=0;$i<sizeof($num);$i++){
$a[$num[$i]]=$num[$i]; //给对就元素赋值。
}
$result=implode(",", $a); //生成结果。
echo $result; //显示
?>
Meteorlet 2005-01-03
  • 打赏
  • 举报
回复
刚才调试了一下上面有错误,正确的是如下:
<?php
$str = "1,2,5,7,100";
$num = explode(",", $str);
sort($num);
$j = 0;
for ($i = $num[0]; $i <= $num[sizeof($num)-1]; $i ++)
{
if ($i == $num[$j])
{
echo $i.",";
$j ++;
} else if ( $i < $num[$j])
{
echo "0,";
} else {
// 在排序的情况下,不会大于
}
}
?>
Meteorlet 2005-01-03
  • 打赏
  • 举报
回复
$str = "1,2,5,7,10";
$num = explode("," $str);
sort($num, SORT_NUMERIC);
$j = 0;
for ($i = $num[0]; $i < $num[sizeof($num)-1]; $i ++)
{
if ($i == $num[$j])
{
echo $i.",";
$j ++;
} else if ( $i < $num[$j])
{
echo "0,";
} else {
// 在排序的情况下,不会大于
}
}
skystar008 2005-01-03
  • 打赏
  • 举报
回复
为什么没有别人愿意帮我?
mrshelly 2005-01-03
  • 打赏
  • 举报
回复
没有必要一千次。
1,2,5,7,10 一个五个元素。只要循环五次就够了。
skystar008 2005-01-03
  • 打赏
  • 举报
回复
声明一点,1,2,5,6,8,10只是我一个例子,没有确定的数字,楼上如果这样做,
如果那串字是从1到1000的难道还要写a[1]...a[1000]吗?这不具备算法的特性了.

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧