求算法

hopechen 2006-10-26 03:31:19
对div循环。当tp=1时,按dt查找,将月份和年份相同的日期的amt相加;当tp=2时,将月份和年份相同的p相加。麻烦高手帮忙了。谢谢了先!
<div dt="2000-03-10" tp="1" amt="0.0555" p="1" />
<div dt="2000-06-16" tp="1" amt="0.0776" p="3" />
<div dt="2000-09-15" tp="1" amt="0.0712" p="2" />
<div dt="2000-12-15" tp="1" amt="0.0862" p="3" />
<div dt="2000-12-15" tp="2" amt="1.005" p="5" />
<div dt="2001-03-16" tp="1" amt="0.0579" p="4" />
<div dt="2001-06-15" tp="1" amt="0.0651" p="4" />
<div dt="2001-09-20" tp="1" amt="0.0629" p="3" />
<div dt="2001-09-20" tp="2" amt="0.352" p="5" />
<div dt="2001-12-21" tp="2" amt="0.019" p="3" />
<div dt="2001-12-21" tp="1" amt="0.0553" p="2" />
<div dt="2002-03-15" tp="1" amt="0.0414" p="1" />
<div dt="2002-06-14" tp="1" amt="0.0517" p="5" />
<div dt="2002-09-13" tp="1" amt="0.0496" p="3" />
<div dt="2002-12-20" tp="1" amt="0.054" p="2" />
<div dt="2003-03-14" tp="1" amt="0.031" p="3" />
<div dt="2003-06-13" tp="1" amt="0.0335" p="3" />
<div dt="2003-09-12" tp="1" amt="0.0316" p="4" />
<div dt="2003-12-19" tp="1" amt="0.0522" p="1" />
<div dt="2004-03-12" tp="1" amt="0.0274" p="1" />
<div dt="2004-06-14" tp="1" amt="0.0411" p="2" />
<div dt="2004-09-10" tp="1" amt="0.0397" p="2" />
<div dt="2004-12-17" tp="1" amt="0.0789" p="2" />
<div dt="2004-12-17" tp="2" amt="0.648" p="3" />

...全文
207 17 打赏 收藏 举报
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
codeworker999 2006-10-30
  • 打赏
  • 举报
回复
function sum()
{
var divs = document.getElementsByTagName("div");
var ary=new Array();
for(i=0;i<divs.length;i++)
{
var dt=divs[i].getAttribute("dt");
dt=dt.substr(0,dt.length-3);
var tp=divs[i].getAttribute("tp");
var amt=eval(divs[i].getAttribute("amt"));
var flg=true;
for(var j=0;j<ary.length;j++)
{
if(ary[j][0]==dt& ary[j][1]==tp)
{
ary[j][2]+=amt;
flg=false;
break;
}
}
if(flg)ary[ary.length]=new Array(dt,tp,amt);
}
//输出结果
var syear=(ary[0][0].split("-"))[0];//起始年
var smonth=(ary[0][0].split("-"))[1];//起始月
var eyear=(ary[ary.length-1][0].split("-"))[0];//终止年
var emonth=(ary[ary.length-1][0].split("-"))[1];//终止月
var tmp=smonth;
document.write("-----------<br>起始年月"+syear+"-"+smonth+"<br>终止年月"+eyear+"-"+emonth+"<br>-----------");
for(var i=syear;i < eyear+1;i++)
{

for(var j=tmp;j<=12;j++)
{
var flg1=true;
var flg2=true;
if(i>eyear)break;
if(i==eyear & j>emonth)break;
var tmon=((""+j).length==2)?j:"0"+j;
for(var k=0;k < ary.length;k++)
{
if(ary[k][1]==1&&ary[k][0]==(i+"-"+tmon))
{
document.write("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
flg1=false;
}
if(ary[k][1]==2&&ary[k][0]==(i+"-"+tmon))
{
document.write("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
flg2=false;
}
if(!flg1&!flg2)break;

}
if(flg1){document.write("<br>"+i+"-"+tmon+"<-->"+1+"<-->"+0);}
if(flg2){document.write("<br>"+i+"-"+tmon+"<-->"+2+"<-->"+0);}
}
tmp=1;
}
jingtao_zhou 2006-10-30
  • 打赏
  • 举报
回复
if(ary[k][2]==1&&ary[k][0]==(i+"-"+tmon))
{
document.write("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
flg2=false;
break;
}
改成
if(ary[k][1]==2&&ary[k][0]==(i+"-"+tmon))
{
document.write("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
flg2=false;
break;
}
//打印结果
-----------
起始年月2000-03
终止年月2004-12
-----------
2000-03<-->1<-->0.0555
2000-03<-->2<-->0
2000-04<-->1<-->0
2000-04<-->2<-->0
2000-05<-->1<-->0
2000-05<-->2<-->0
2000-06<-->1<-->0.0776
2000-06<-->2<-->0
2000-07<-->1<-->0
2000-07<-->2<-->0
2000-08<-->1<-->0
2000-08<-->2<-->0
2000-09<-->1<-->0.0712
2000-09<-->2<-->0
2000-10<-->1<-->0
2000-10<-->2<-->0
2000-11<-->1<-->0
2000-11<-->2<-->0
2000-12<-->1<-->0.0862
2000-12<-->2<-->0
2001-01<-->1<-->0
2001-01<-->2<-->0
2001-02<-->1<-->0
2001-02<-->2<-->0
2001-03<-->1<-->0.0579
2001-03<-->2<-->0
2001-04<-->1<-->0
2001-04<-->2<-->0
2001-05<-->1<-->0
2001-05<-->2<-->0
2001-06<-->1<-->0.0651
2001-06<-->2<-->0
2001-07<-->1<-->0
2001-07<-->2<-->0
2001-08<-->1<-->0
2001-08<-->2<-->0
2001-09<-->1<-->0.0629
2001-09<-->2<-->0
2001-10<-->1<-->0
2001-10<-->2<-->0
2001-11<-->1<-->0
2001-11<-->2<-->0
2001-12<-->2<-->0.019
2001-12<-->1<-->0
2002-01<-->1<-->0
2002-01<-->2<-->0
2002-02<-->1<-->0
2002-02<-->2<-->0
2002-03<-->1<-->0.0414
2002-03<-->2<-->0
2002-04<-->1<-->0
2002-04<-->2<-->0
2002-05<-->1<-->0
2002-05<-->2<-->0
2002-06<-->1<-->0.0517
2002-06<-->2<-->0
2002-07<-->1<-->0
2002-07<-->2<-->0
2002-08<-->1<-->0
2002-08<-->2<-->0
2002-09<-->1<-->0.0496
2002-09<-->2<-->0
2002-10<-->1<-->0
2002-10<-->2<-->0
2002-11<-->1<-->0
2002-11<-->2<-->0
2002-12<-->1<-->0.054
2002-12<-->2<-->0
2003-01<-->1<-->0
2003-01<-->2<-->0
2003-02<-->1<-->0
2003-02<-->2<-->0
2003-03<-->1<-->0.031
2003-03<-->2<-->0
2003-04<-->1<-->0
2003-04<-->2<-->0
2003-05<-->1<-->0
2003-05<-->2<-->0
2003-06<-->1<-->0.0335
2003-06<-->2<-->0
2003-07<-->1<-->0
2003-07<-->2<-->0
2003-08<-->1<-->0
2003-08<-->2<-->0
2003-09<-->1<-->0.0316
2003-09<-->2<-->0
2003-10<-->1<-->0
2003-10<-->2<-->0
2003-11<-->1<-->0
2003-11<-->2<-->0
2003-12<-->1<-->0.0522
2003-12<-->2<-->0
2004-01<-->1<-->0
2004-01<-->2<-->0
2004-02<-->1<-->0
2004-02<-->2<-->0
2004-03<-->1<-->0.0274
2004-03<-->2<-->0
2004-04<-->1<-->0
2004-04<-->2<-->0
2004-05<-->1<-->0
2004-05<-->2<-->0
2004-06<-->1<-->0.0411
2004-06<-->2<-->0
2004-07<-->1<-->0
2004-07<-->2<-->0
2004-08<-->1<-->0
2004-08<-->2<-->0
2004-09<-->1<-->0.0397
2004-09<-->2<-->0
2004-10<-->1<-->0
2004-10<-->2<-->0
2004-11<-->1<-->0
2004-11<-->2<-->0
2004-12<-->1<-->0.0789
2004-12<-->2<-->0
jingtao_zhou 2006-10-30
  • 打赏
  • 举报
回复
//打印结果
-----------
起始年月2000-03
终止年月2004-12
-----------
2000-03<-->1<-->0.0555
2000-03<-->2<-->0
2000-04<-->1<-->0
2000-04<-->2<-->0
2000-05<-->1<-->0
2000-05<-->2<-->0
2000-06<-->1<-->0.0776
2000-06<-->2<-->0
2000-07<-->1<-->0
2000-07<-->2<-->0
2000-08<-->1<-->0
2000-08<-->2<-->0
2000-09<-->1<-->0.0712
2000-09<-->2<-->0
2000-10<-->1<-->0
2000-10<-->2<-->0
2000-11<-->1<-->0
2000-11<-->2<-->0
2000-12<-->1<-->0.0862
2000-12<-->2<-->0
2001-01<-->1<-->0
2001-01<-->2<-->0
2001-02<-->1<-->0
2001-02<-->2<-->0
2001-03<-->1<-->0.0579
2001-03<-->2<-->0
2001-04<-->1<-->0
2001-04<-->2<-->0
2001-05<-->1<-->0
2001-05<-->2<-->0
2001-06<-->1<-->0.0651
2001-06<-->2<-->0
2001-07<-->1<-->0
2001-07<-->2<-->0
2001-08<-->1<-->0
2001-08<-->2<-->0
2001-09<-->1<-->0.0629
2001-09<-->2<-->0
2001-10<-->1<-->0
2001-10<-->2<-->0
2001-11<-->1<-->0
2001-11<-->2<-->0
2001-12<-->1<-->0.0553
2001-12<-->2<-->0
2002-01<-->1<-->0
2002-01<-->2<-->0
2002-02<-->1<-->0
2002-02<-->2<-->0
2002-03<-->1<-->0.0414
2002-03<-->2<-->0
2002-04<-->1<-->0
2002-04<-->2<-->0
2002-05<-->1<-->0
2002-05<-->2<-->0
2002-06<-->1<-->0.0517
2002-06<-->2<-->0
2002-07<-->1<-->0
2002-07<-->2<-->0
2002-08<-->1<-->0
2002-08<-->2<-->0
2002-09<-->1<-->0.0496
2002-09<-->2<-->0
2002-10<-->1<-->0
2002-10<-->2<-->0
2002-11<-->1<-->0
2002-11<-->2<-->0
2002-12<-->1<-->0.054
2002-12<-->2<-->0
2003-01<-->1<-->0
2003-01<-->2<-->0
2003-02<-->1<-->0
2003-02<-->2<-->0
2003-03<-->1<-->0.031
2003-03<-->2<-->0
2003-04<-->1<-->0
2003-04<-->2<-->0
2003-05<-->1<-->0
2003-05<-->2<-->0
2003-06<-->1<-->0.0335
2003-06<-->2<-->0
2003-07<-->1<-->0
2003-07<-->2<-->0
2003-08<-->1<-->0
2003-08<-->2<-->0
2003-09<-->1<-->0.0316
2003-09<-->2<-->0
2003-10<-->1<-->0
2003-10<-->2<-->0
2003-11<-->1<-->0
2003-11<-->2<-->0
2003-12<-->1<-->0.0522
2003-12<-->2<-->0
2004-01<-->1<-->0
2004-01<-->2<-->0
2004-02<-->1<-->0
2004-02<-->2<-->0
2004-03<-->1<-->0.0274
2004-03<-->2<-->0
2004-04<-->1<-->0
2004-04<-->2<-->0
2004-05<-->1<-->0
2004-05<-->2<-->0
2004-06<-->1<-->0.0411
2004-06<-->2<-->0
2004-07<-->1<-->0
2004-07<-->2<-->0
2004-08<-->1<-->0
2004-08<-->2<-->0
2004-09<-->1<-->0.0397
2004-09<-->2<-->0
2004-10<-->1<-->0
2004-10<-->2<-->0
2004-11<-->1<-->0
2004-11<-->2<-->0
2004-12<-->1<-->0.0789
2004-12<-->2<-->0
jingtao_zhou 2006-10-30
  • 打赏
  • 举报
回复
//输出结果
var syear=(ary[0][0].split("-"))[0];//起始年
var smonth=(ary[0][0].split("-"))[1];//起始月
var eyear=(ary[ary.length-1][0].split("-"))[0];//终止年
var emonth=(ary[ary.length-1][0].split("-"))[1];//终止月
var tmp=smonth;
document.write("-----------<br>起始年月"+syear+"-"+smonth+"<br>终止年月"+eyear+"-"+emonth+"<br>-----------");
for(var i=syear;i < eyear+1;i++)
{

for(var j=tmp;j<=12;j++)
{
var flg1=true;var flg2=true;
if(i>eyear)break;
if(i==eyear & j>emonth)break;
var tmon=((""+j).length==2)?j:"0"+j;
for(var k=0;k < ary.length;k++)
{
if(ary[k][1]==1&&ary[k][0]==(i+"-"+tmon))
{
document.write("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
//alert("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
flg1=false;
break;
}
if(ary[k][2]==1&&ary[k][0]==(i+"-"+tmon))
{
document.write("<br>"+ary[k][0]+"<-->"+ary[k][1]+"<-->"+ary[k][2]);
flg2=false;
break;
}

}
if(flg1){document.write("<br>"+i+"-"+tmon+"<-->"+1+"<-->"+0);}
if(flg2){document.write("<br>"+i+"-"+tmon+"<-->"+2+"<-->"+0);}
}
tmp=1;
}
hdhmail2000 2006-10-27
  • 打赏
  • 举报
回复
按年安月份循环吧
然后就根据document.getElementsByTagName("div")来找值吧
如果满足条件的的为null,则说明没有值,赋予值0
具体前面的兄弟代码都写得差不多了
hopechen 2006-10-27
  • 打赏
  • 举报
回复
感觉最好的方式是对月份进行循环来做吧。我的思路混乱了
hopechen 2006-10-27
  • 打赏
  • 举报
回复
都是从2000-03月
jingtao_zhou 2006-10-27
  • 打赏
  • 举报
回复
对于tp==1是从2000-03开始打印
那对于tp==2是从2000-03还是从2000-12开始打印?
hopechen 2006-10-27
  • 打赏
  • 举报
回复
表像这样:
<div dt="2002-03-15" tp="1" amt="0.0414" p="" />
<div dt="2002-06-14" tp="1" amt="0.0517" p="" />
<div dt="2002-09-13" tp="1" amt="0.0496" p="" />
<div dt="2002-12-20" tp="1" amt="0.054" p="" />
<div dt="2003-03-14" tp="1" amt="0.031" p="" />
<div dt="2003-06-13" tp="1" amt="0.0335" p="" />
<div dt="2003-09-12" tp="1" amt="0.0316" p="" />
<div dt="2003-12-19" tp="1" amt="0.0522" p="" />
<div dt="2004-03-12" tp="1" amt="0.0274" p="" />
<div dt="2004-06-14" tp="1" amt="0.0411" p="" />
<div dt="2004-09-10" tp="1" amt="0.0397" p="" />
<div dt="2004-12-17" tp="1" amt="0.0789" p="" />
<div dt="2004-12-17" tp="2" amt="0.648" p="" />
<div dt="2005-03-11" tp="1" amt="0.0308" p="" />
<div dt="2005-06-10" tp="1" amt="0.0413" p="" />
<div dt="2005-09-16" tp="1" amt="0.0409" p="" />
<div dt="2005-12-16" tp="1" amt="0.0497" p="" />
<div dt="2005-12-16" tp="2" amt="0.589" p="" />
<div dt="2006-03-10" tp="1" amt="0.0338" p="" />
<div dt="2006-06-16" tp="1" amt="0.0425" p="" />
<div dt="2006-09-15" tp="1" amt="0.0393" p="10.44" />
我做的部分的结果。还不完善。看id。它表示了月份的变化。没有的月份跳过也可以的。
<data id=\"1\">0.0414</data>
<data id=\"4\">0.0517</data>
<data id=\"7\">0.0496</data>
<data id=\"10\">0.054</data>
<data id=\"13\">0.031</data>
<data id=\"16\">0.0335</data>
<data id=\"19\">0.0316</data>
<data id=\"22\">0.0522</data>
<data id=\"25\">0.0274</data>
<data id=\"28\">0.0411</data>
<data id=\"31\">0.0397</data>
<data id=\"34\">0.0789</data>
<data id=\"37\">0.0308</data>
<data id=\"40\">0.0413</data>
<data id=\"43\">0.0409</data>
<data id=\"46\">0.0497</data>
<data id=\"49\">0.0338</data>
<data id=\"52\">0.0425</data>
hopechen 2006-10-27
  • 打赏
  • 举报
回复
表中第一个就是开始的日期。最后一个就是结束日期。最后就根据这个区间打出图表来
jingtao_zhou 2006-10-27
  • 打赏
  • 举报
回复
那样tp要分开打吧
不知道起始年月啊,怎么打
hopechen 2006-10-27
  • 打赏
  • 举报
回复
楼上的不对呀。月份要连续。没有值的月份也要的。而且如果同一个月有多个值。要把他们加起来
jingtao_zhou 2006-10-27
  • 打赏
  • 举报
回复
<script>
function sum()
{
var divs = document.getElementsByTagName("div");
var ary=new Array();
for(i=0;i<divs.length;i++)
{
var dt=divs[i].getAttribute("dt").split("-");
var tp=divs[i].getAttribute("tp");
var amt=eval(divs[i].getAttribute("amt"));
var flg=true;
for(var j=0;j<ary.length;j++)
{
var tmp=ary[j][0].split("-");
if(tmp[0]==dt[0] &tmp[1]==dt[1]& ary[j][1]==tp)
{
ary[j][2]+=amt;
flg=false;
break;
}
}
if(flg)ary[ary.length]=new Array(dt[0]+"-"+dt[1],tp,amt);
}
//输出结果
for(var i=0;i<ary.length;i++)
{
document.write("<br>"+ary[i][0]+"<-->"+ary[i][1]+"<-->"+ary[i][2]);
}

}
</script>
//打印结果
2000-03<-->1<-->0.0555
2000-06<-->1<-->0.0776
2000-09<-->1<-->0.0712
2000-12<-->1<-->0.0862
2000-12<-->2<-->1.005
2001-03<-->1<-->0.0579
2001-06<-->1<-->0.0651
2001-09<-->1<-->0.0629
2001-09<-->2<-->0.352
2001-12<-->2<-->0.019
2001-12<-->1<-->0.0553
2002-03<-->1<-->0.0414
2002-06<-->1<-->0.0517
2002-09<-->1<-->0.0496
2002-12<-->1<-->0.054
2003-03<-->1<-->0.031
2003-06<-->1<-->0.0335
2003-09<-->1<-->0.0316
2003-12<-->1<-->0.0522
2004-03<-->1<-->0.0274
2004-06<-->1<-->0.0411
2004-09<-->1<-->0.0397
2004-12<-->1<-->0.0789
2004-12<-->2<-->0.648
hopechen 2006-10-27
  • 打赏
  • 举报
回复
也会出现中间有几个月没有记录。这样的话。这几个月的amt or p值就赋0。最后的目的是根据日期画图。所以所有的月份都要连续。
hopechen 2006-10-27
  • 打赏
  • 举报
回复
已经按照日期排好序了。现在要根据tp为1 和为2 的情况分类。然后tp==1时,将日期的月份和年份相同的amt值加起来。tp==2时,将日期和年份相同的p值加起来。给的东西不完整。同一年的同一个月但不同日期的纪录可能有多个。
一直在攀登 2006-10-26
  • 打赏
  • 举报
回复
javascript:
var divs = document.getElementByTagName("div");
for(i=0;i<divs.length;i++)
{

}
不过写到这,感觉没明白你的需求.
hopechen 2006-10-26
  • 打赏
  • 举报
回复
怎么没人帮忙呢?
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-26 03:31
社区公告

让您成为最强悍的C#开发者