逻辑练习之循环
【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
【斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34】
答题思路: 斐波那契数列,有已知的两位数,求出第三位
这里定义三个变量,分别表示第一个月的兔子数,第二个月的兔子数,第三个月的兔子变量。利用循环算出每个月的兔子数。
重点是:第三个月等于第一个月+第二个月数量。然后把第二个月的值给第一个月,第三个月的值给第二个月,再计算
<script>
var first = 1,
second =1,
third;
for(var i =1;i <= 12;i++){
if(i >2){
third = first + second;
first = second;
second =third;
document.write('第'+i+'个月的兔子数是:'+third+'对<br/>');
}
else{
document.write('第'+i+'个月的兔子数是:'+first+'对<br/>');
}
}
</script>
【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数。
<script>
var count = 0;
for (var i = 101; i <= 200; i++) {
for (var j = 2; j <= i; j++) {
if (i % j == 0) {
break;
}
else {
if (j + 1 == i) {
count++;
document.write(i + '<br/>')
}
}
}
}
document.write('101到200之间共有:' + count + '个质数');
</script>
【程序3】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
<script>
var str = '';
for(var i = 100;i < 1000;i++){
var hundred = parseInt(i / 100); //取百位
var decade = parseInt(i / 10 % 10) //十位
var theUnit = parseInt(i % 10); //个位
if(i == (hundred * hundred *hundred)+(decade * decade * decade)+(theUnit * theUnit *theUnit)){
str += i+'、';
}
}
str = str.substr(0,str.length-1); //截掉最后一个 、
document.write('100到1000的水仙花是有:'+str);
</script>
【程序4】
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
<script>
var num = +window.prompt('※请输入一个数为你算出它的分解质因数※');
var str = num + '的分解质因数是:';
var m = 1;
for(var i = 1;i <= num; i++){
while(num % i ==0){
m = i;
num = num / i;
i = 2;
str +=m+'*';
}
}
str = str.substring(0,str.length-1);
document.write(str);
</script>
【程序5】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
<script>
var first = +window.prompt('输入数字1');
var second = +window.prompt('输入数字2');
var a = first > second?second:first;
for(var i = a;i >= 0;i--){
if(first % i == 0 && second % i == 0){
var b = i;
break;
}
}
if( first <= 1){
document.write('最大公约数是'+second);
document.write('最小公倍数是'+first );
}
else{
document.write('最大公约数是:'+b);
document.write('最小公倍数是'+(first * second / b));
}
</script>
【程序6】
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
<script>
var num = +window.prompt('请输入要累加的数字');
var n = +window.prompt('请输入要累加的次数');
var count = 0;
var sum = 0;
var str = '';
for(var i = 0;i < n;i++){
count += num * Math.pow(10,i);
sum += count;
str += count+'+';
}
str = str.substring(0,str.length-1);
document.write(str+'='+sum);
</script>
【程序7】
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
<script>
var count = '';
for(var i = 1;i <1000;i++){
var sum= 0;
for(var j = 1;j <= i / 2;j++){
if(i % j == 0){
sum += j;
}
}
if(sum == i){
count += i+'、';
}
}
count = count.substring(0,count.length-1);
document.write('一千以内的完数为:'+count +'<br>');
</script>
【程序8】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
<script >
var str = '1-2-3-4可以组成';
var count = 0;
for(var i = 1;i <= 4;i++){
for(var j = 1;j <= 4;j++){
for(var k = 1;k <= 4;k++){
if(i != j && i != k && j != k){
count++;
str += '<br/>'+i+j+k;
}
}
}
}
document.write(str);
document.write('<br/>一共可以组成'+count+'个不相同的三位数!');
</script>
【程序9】
题目:企业发放的奖金根据利润提成。利润(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>
var price = +window.prompt('请输入当月利润(万元)');
var sum = 0;
if(price <= 10){
sum = price * 0.1;
}
else if(price <= 20){
sum = 1 + price*0.075;
}
else if(price <= 40){
sum = 1.75 + price*0.05;
}
else if(price <= 60){
sum =price*0.03;
}
else if(price <= 100){
sum = price*0.015;
}
else{
sum = price*0.01;
}
document.write('销售提成是:'+sum+'万元');
</script>
【程序10】
打印菱形
(有点问题,有兴趣的可以研究一下)
<script>
for(var i = 0;i < 5;i++){
for(var k = 5;k >=i;k--){
document.write(' ');
}
for(var j = 1;j < i * 3-1;j++){
document.write('*');
}
document.write('<br/>')
}
for(var i = 5;i >= 0 ;i--){
for(var k = 5;k >=i;k--){
document.write(' ');
}
for(var j = 1;j < i * 3-1;j++){
document.write('*');
}
document.write('<br/>')
}
</script>
【程序11】
【程序5】
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
<script>
//三目元算符
var sum = +window.prompt('请输入分数:');
var s = sum >= 90?'A':
sum >= 60?'B':
sum > 0?'C':'请输入正确的分数';
document.write(s);
//if判断
var sum = +window.prompt('请输入分数:');
var s = '';
if(sum >= 90){
s ='A';
}else if(sum >= 60){
s = 'B';
}
else if(sum <60 && sum >0){
s = 'C';
}
else{
s = '请输入正确的分数';
}
document.write(s);
</script>
【程序12】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
<script>
var height = 100;
var s = 100;
for(var i = 0;i < 10;i++){
s += height;
height /= 2;
}
document.write('经过路程是:'+s+'米<br/>');
</script>