- 題目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>