十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个问题主要出错在你的数学公式上,不知道你这个数学计算要表达什么。基本上你点击之后都是执行到这句:
成都创新互联-专业网站定制、快速模板网站建设、高性价比乌兰网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式乌兰网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖乌兰地区。费用合理售后完善,10余年实体公司更值得信赖。
if (a*a*a+b*b*b+c*c*c!==i)
{break;}
然后跳出循环。改了一下,这样是能够执行的,不过你需要完善的计算公式
水仙花.html
!doctype html
html lang="zh"
head
meta charset="utf-8" /
title水仙花/title
/head
body
form
请输入下区间:input name="text" type="text" name="lownum" id="lownum" /
请输入上区间:input name="text" type="text" name="highnum" id="highnum" /
input id="btn" name="btn" type="button" value="计算" /
/form
script src="shuixianhua.js"/script
/body
/html
shuixianhua.js
window.onload = shuixianhua;
function shuixianhua()
{
var i,a,b,c,n; //不知道你的变量 n 有什么作用
var low_value = parseInt(document.getElementById("lownum").value);
var high_value = parseInt(document.getElementById("highnum").value);
var btn_node = document.getElementById("btn");
var result_node = document.getElementById("btn");
for(i = low_value; i = high_value; i++)
{
a = Math.round(i/100); //或者 Math.floor() Math.ceil()
b = Math.round(i%100/10); //或者 Math.floor() Math.ceil()
c = i%10;
if (a*a*a+b*b*b+c*c*c!==i)
{break;}
else
{
btn_node.onclick = function()
{
document.write("找到第" + n + "个数:" + i);
}
}
}
}
(10,20)(20,30)如果只是判断有交叉的到也简单
(10,20)-的大小 20-10=10
(20,30)大小30-20=10
(10,20)(20,30)大小30-10=20
现在10+10=20,ok,他们没有交叉
验证:
(10,20)(19,30)
| |
10 11
(10+11)(30-10)
ok他们有交叉
其实,我的想法很简单,既然是区间了,他就有个界限,你可以用他的界限来看看他是处在哪个区间,或者说是那几个区间之间。
判断(x,y)有没有跟其他的区间交叉,
如果x10,说明他肯定没有跟(10,20)交叉,也不会跟区间左界限10的区间交叉,
如果x10说明他有可能跟(10,20)交叉,当然还要看y的大小了,
总之,就是比较x,y 跟几个区间界限的大小,这样就能判定他跟几个区间的交叉。
在这里,还是要好好的考虑一下怎样比较下来,比较的节省时间。
现在有两个数组
var revenue = new Array([350],[450],[550],[650],[850],[1000],[1100],[1250],[1500]);
var reward = new Array([30],[40],[50],[100],[200],[240],[300],[400]);
如果收入大于350 小于 450 那么就奖励30
如果收入大于450小于550,就奖励50
要实现的效果跟Excel中的VlookUP函数比较像,想问下各位朋友,JS中如何有没有类似的函数,或者怎么写最有效的判断语句。
switch(a/10){
case 0:
case 1:
case 2: f("很差劲");break;
case 3
意思是:a/10的值是否等于0,1,2,是就执行 f("很差劲");break;的意思是结束,不影响下面其他数,如果你想0执行一个,1也执行一个的话:
case 0:f("很差劲");break;//没break,默认是一组判断
case 1: f("很差劲");break;
wei521su这种遍历方法,
范围在1到10000性能勉强可以接受, 范围超过10000时耗时估计超过3分钟,几次提示“很慢建议停止脚步”;
从减少开辟变量和遍历次数进行优化,发现还是很卡;
再大范围需要改进算法(eg:用哈希算法,将数据先吃到内存),不然估计出不来了;
html
head
script type="text/javascript"
function getzhishu(num1,num2){
var sum = 0,j,indexMax;
if(num12 num2===2){
sum++;
document.write(2+"|");
}else if(num12 num2=3){
sum+=2;
document.write(2+"|");
document.write(3+"|");
}else if(num2=3 num1=3){
sum++;
document.write(3+"|");
}
for(var i=5;inum2;i++){
indexMax = parseInt(i/2);
for(j=2;jindexMax;j++){
if(i%j==0){
break;
}
}
if(indexMax == j){
sum++;
document.write(i+"|");
}
}
document.write("br"+sum);
}
getzhishu(1,10000);
/script
/head
bodyfont color="red"Hi!/font/body
/html
使用了一层hash改进的方法:
在IE6测试了100000条,在首次加载很慢,以后调用相当地快;
IE8需要设置IE最大运行脚本语句数,调够大,不然老是提示“是否停止脚本运行”;
html
head
script type="text/javascript"
var HashPool = function(size){
this.size = size;
this.pool = new Array();
this.loadPool(100000);
}
HashPool.prototype.loadPool = function(nr){
var sum=5,j,indexMax;
var arr = new Array();
this.pool.push(arr);
arr.push(2);
arr.push(3);
for(var i=5;i=nr;i++){
sum++;
if(sumthis.size){
sum=1;
arr = new Array();
this.pool.push(arr);
}
indexMax = parseInt(i/2);
for(j=2;jindexMax;j++){
if(i%j==0){
break;
}
}
if(indexMax == j){
arr.push(i);
}
}
}
HashPool.prototype.writeAll = function(){
var i,j;
for(i = 0; ithis.pool.length;i++){
for(j=0; jthis.pool[i].length;j++){
document.write(this.pool[i][j]+"\t");
}
}
}
HashPool.prototype.write = function(nl,nr){
var arr = this.getZhiShu(nl,nr);
for(var i = 0; iarr.length;i++){
document.write(arr[i]+"\t");
}
document.write("br总数:"+arr.length);
}
HashPool.sliceLeft = function(arr,value){
/* //遍历方式
if(arr[arr.length-1]value){
return new Array();
}
for(var i=0;iarr.length;i++){
if(value=arr[i]){
return arr.slice(i);
}
}
return [];*/
// 二分法
var index = HashPool.getIndex(arr,value);
if(index=0){
if(arr[index] === value || index === 0){
return arr.slice(index);
}
return arr.slice(index+1);
}
return [];
}
HashPool.sliceRight = function(arr,value){
/* //遍历方式
if(arr[arr.length-1]value){
return arr;
}
for(var i=0;iarr.length;i++){
if(value===arr[i]){
return arr.slice(0,i+1);
}
if(valuearr[i]){
return arr.slice(0,i);
}
}
return [];*/
// 二分法
var index = HashPool.getIndex(arr,value);
if(index0){
return arr.slice(0,index+1);
}
return [];
}
HashPool.getIndex = function(arr,v){
if(arr[arr.length-1]v){
return arr.length-1;
}else if(arr[0]v){
return 0;
}
var l=0,r=arr.length-1,il;
while(l=r){
il=parseInt((r+l)/2);
if(arr[il]v arr[il+1]v){
return il;
}else if(arr[il]===v){
return il;
}else if(arr[il]v){
r = il - 1;
}else{
l = il + 1;
}
}
return -1;
}
HashPool.prototype.getZhiShu = function(nl,nr){
var i,j,indexMax,lIndex,rIndex;
var resultArr = new Array(),lastArr = this.pool[this.pool.length-1];
if(nr - nl 3*this.size){
if(nl1){
alert("最小值:"+nl+"1,程序默认设置最小值=1");
nl = 1;
document.getElementById("nleft").value = nl;
}
if(nrlastArr[lastArr.length-1]){
alert("最大值:"+nr+"加载的最大值:"+lastArr[lastArr.length-1]+",程序默认设置最大值=加载的最大值");
nr = lastArr[lastArr.length-1];
document.getElementById("nright").value = nr;
}
lIndex = parseInt(nl/this.size);
rIndex = parseInt(nr/this.size);
resultArr = resultArr.concat(HashPool.sliceLeft(this.pool[lIndex],nl));
for(i = lIndex+1;irIndex;i++){
resultArr = resultArr.concat(this.pool[i]);
}
resultArr = resultArr.concat(HashPool.sliceRight(this.pool[rIndex],nr));
}else{
if(nl2 nr===2){
resultArr.push(2);
}else if(nl2 nr=3){
resultArr.push(2);
resultArr.push(3);
}else if(nr=3 nl=3){
resultArr.push(3);
}
for(i=5;i=nr;i++){
indexMax = parseInt(i/2);
for(j=2;jindexMax;j++){
if(i%j==0){
break;
}
}
if(indexMax == j){
resultArr.push(i);
}
}
}
return resultArr;
}
var hashPool = new HashPool(500);
//hashPool.writeAll();
//hashPool.write(1,3000);
function submit(){
var nl = parseInt(document.getElementById("nleft").value);
var nr = parseInt(document.getElementById("nright").value);
var arr = hashPool.getZhiShu(nl,nr);
document.getElementById("printDiv").innerText = arr.join("|") +"\n总数:"+arr.length;
}
/script
/head
bodyfont color="red"Hi! 质数。br请输入一个范围:brbr
起始数字:input type="text" value="" id="nleft"/
终止数字:input type="text" value="" id="nright"/
input type="button" value="输出" onclick="submit();"/
div id = 'printDiv'/div
/font/body
/html
你这个方法有点不对低效,给你写个新的方法吧,随便加减天数
//获取时间方法
Date.prototype.Format = function (fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
//获取当前日期
var starTime= new Date().Format("yyyy-MM-dd");//Format("输入你想要的时间格式:yyyy-MM-dd,yyyyMMdd")
//结束时间
var date = new Date();//获取当前时间
date.setDate(date.getDate()+15);//设置天数 15 天
var endTime = date.Format("yyyy-MM-dd"); //加完15天以后的时间
然后你就获取 开始时间starTime和结束时间endTime了 ,结束时间可以随便改了....
然后写入你的DIV里就ok了
$('starDate').value=starTime;
$('endData').value=endTime;
不需要写那么多 if啊 加0啊 之类的。