- 题目1:企业发放的奖金根据利润提成。
利润 (I) 低于或等于 10 万元时,奖金可提 10% ;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10% 提成,高于 10 万元的部分,可可提成 7.5% ; 20 万到 40 万之间时,高于 20 万元的部分,可提成 5%;40 万到 60 万之间时高于 40 万元的部分,可提成 3% ;60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5% , 高于 100 万元时,超过 100 万元的部分按 1% 提成,从键盘输入当月利润 I ,求应发放奖金总数?
<script>
function calc(sales){
var bonus=0;//定义bonus=0;
if(sales>100){//如果sales>100
//(sales-100)*0.01,累加到bonus上
bonus+=(sales-100)*0.01;
sales=100;//sales=100
}
if(sales>60){//如果sales>60
//(sales-60)*0.015,累加到bonus上
bonus+=(sales-60)*0.015;
sales=60;//sales=60
}
if(sales>40){//如果sales>40
//(sales-40)*0.03,累加到bonus上
bonus+=(sales-40)*0.03;
sales=40;//sales=40
}
if(sales>20){//如果sales>20
//(sales-20)*0.05,累加到bonus上
bonus+=(sales-20)*0.05;
sales=20;//sales=20
}
if(sales>10){//如果sales>10
//(sales-10)*0.075,累加到bonus上
bonus+=(sales-10)*0.075;
sales=10;//sales=10
}
//sales*0.1,累加到bonus上
bonus+=sales*0.1;
return bonus;//返回bonus
}
console.log(calc(50));//输出利润50w
</script>
- 题目2:输入某年某月某日,判断这一天是这一年的第几天?
var y, m, d,days=0;
y=parseInt(prompt("输入年"));
m=parseInt(prompt("输入月"));
d=parseInt(prompt("输入日"));
switch(m-1){
case 11:
days+=30;
case 10:
days+=31;
case 9:
days+=30;
case 8:
days+=31;
case 7:
days+=31;
case 6:
days+=30;
case 5:
days+=31;
case 4:
days+=30;
case 3:
days+=31;
case 2:
days+=(y%4==0&&(y%100!=0)||(y%400==0)?29:28);
//闰年的条件:能被4整除且不能被100整除,或者能被400整除
case 1:
days+=31;
default:
break;
}
days+=d;
console.log("这是这一年中的第"+days+"天");
<script>
function days(y,m,d){
var days=0;//定义days保存总天数
//如果m>11,就累加30
if(m>11) days+=30;
//如果m>10,就累加31
if(m>10) days+=31;
//如果m>9,就累加30
if(m>9) days+=30;
//如果m>8,就累加31
if(m>8) days+=31;
//如果m>7,就累加31
if(m>7) days+=31;
//如果m>6,就累加30
if(m>6) days+=30;
//如果m>5,就累加31
if(m>5) days+=31;
//如果m>4,就累加30
if(m>4) days+=30;
//如果m>3,就累加31
if(m>3) days+=31;
//如果m>2,就累加28
if(m>2) days+=28;
//如果m>1,就累加31
if(m>1) days+=31;
days+=d;//再累加d
//如果m>2且是闰年,就days再加1
if(m>2&&
(y%4==0&&y%100!=0||y%400==0))
days+=1;
return days;//返回days
//闰年判断条件:2种情况都行
// 1. y能被4整除且不能别100整除
// 2. y能被400整除
}
console.log(
days(1998,5,15),
days(2000,4,20)
);
</script>
- 题目3:有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
<script>
//外层循环控制百位,count记录循环执行次数
for(var i=1,count=0;i<5;i++)
//中层循环控制十位
for(var j=1;j<5;j++)
//只有i!=j时,才有必要执行内层循环
if(i!=j)
//内层循环控制个位
for(var k=1;k<5;k++){
//如果i!=j且j!=k且i!=k
if(j!=k&&i!=k)
console.log(""+i+j+k);
count++;//循环次数+1
}
console.log("循环了"+count+"次");
</script>
- 题目4,经典题:斐波拉茨
古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
Fibonacci 斐波那契
f(1)=1 f(2)=1 f(3)=f(n-1)+f(n-2)...
1 1 2 3 5 8 13 21 34 55
<script>
// 递归
function fib(n){
if(n<3) return 1;
else
return fib(n-1)+fib(n-2);
}
</script>
<script>
//循环:
function fib(n){
if(n<3) return 1;
else{
//定义fn1,fn2,都初始化为1
var fn1=1,fn2=1,fn;
for(var i=0;i<n-2;i++){//循环n-2次:
fn=fn1+fn2;
fn1=fn2;
fn2=fn;
}
return fn;//返回fn
}
}
console.log(
fib(7),//13
fib(10)//55
);
//递归调用: 函数内部,又调用了自己
//缺点: 计算重复次数和复杂度极高,效率极低
//解决: 几乎所有递归都可用循环代替!
</script>