1.输入两个数,找出他们的最大公约数和最小公倍数
(循环)方法一:
var num1 = Number(prompt("请输入第一个数:"));
var num2 = Number(prompt("请输入第二个数:"));
var max = num1 > num2 ? num1 : num2
var min = num1 < num2 ? num1 : num2
while (1) {
var t = min;
min = max % min;
max = t;
if (min == 0) {
break;
}
}
console.log(num1 + "和" + num2 + "的最大公约数是:" + max)
min = (num1 * num2) / max; // 最小公倍数
console.log(num1 + "和" + num2 + "的最小公倍数是:" + min);
(循环)方法二:
var a = Number(prompt("请输入第一个数"));
var b = Number(prompt("请输入第二个数"));
// 最小公倍数
for (var i = a; i <= a * b; i++) {
if (i % a == 0 && i % b == 0) {
console.log(i);
break;
}
}
// 最大公约数
for (var j = a; j >= 1; j--) {
if (a % j == 0 && b % j == 0) {
console.log(j);
break;
}
}
(函数递归) 方法三:
// 最大公约数
function gcd(m, n) {
var min = m < n ? m : n
var max = m > n ? m : n
var t = min
min = max % min
max = t
if (min != 0) {
return gcd(min, max)
} else {
return max
}
}
// 最小公倍数
function lcm(m, n) {
return m * n / gcd(m, n)
}
var m = +prompt("请输入第一个数");
var n = +prompt("请输入第二个数");
console.log("最大公约数是:" + gcd(m, n));
console.log("最小公倍数是:" + lcm(m, n));
2.有数字0,1,2,3,4五个字,可以组成多少个无重复的四位数(第一个数不是0)
穷举法:
var sum = 0;
for (var i = 1; i < 5; i++) {
// 取千位数
for (var j = 0; j < 5; j++) {
// 百位数
for (var k = 0; k < 5; k++) {
// 取十位数
for (var l = 0; l < 5; l++) {
// 取个位数
if (i != j && i != k && i != l && j != k && j != l && k != l) {
sum += 1;
}
}
}
}
}
console.log(sum);
3.找出0-100之间的质数
方法一:
for (var i = 2; i <= 100; i++) {
var f = 1
for (var j = 2; j < i; j++) {
if (i % j == 0) {
f = 0
}
}
if (f) {
console.log(i);
}
}
方法二:
for (var i = 2; i < 100; i++) {
for (var j = 2; j < i; j++) {
if (i % j == 0) {
break;
}
}
// 代表内循环结束
if (i == j) {
console.log(i);
}
}
4.把一个球从100米高空扔下,每次落地会反弹原高度的一半,问10次之后这个球一共运动了多少米
方法一(以一下一上为一个轮回100+50 + 50+25 +25+12.5...):
var h = 100
var sum = 0
for (var i = 1; i <= 10; i++) {
sum += h
h = h / 2
sum += h
}
console.log("10次之后这个球一共运动了" + sum + "米");
方法二(以一上一下为一个轮回,注意第一次的上没有100 +50+50 +25+25):
var sum = 100;
var height = 100;
for (var i = 0; i < 9; i++) {
sum += height;
height /= 2;
}
console.log(sum);
5.找出100~1000所有的水仙花数 (153=1*1*1+5*5*5+3*3*3)
方法一(穷举法):
for (var i = 1; i < 10; i++) {
for (var j = 0; j < 10; j++) {
for (var k = 0; k < 10; k++) {
if (i * i * i + j * j * j + k * k * k == i + "" + j + "" + k) {
console.log(i + "" + j + "" + k);
}
}
}
}
方法二(去除每一位上的数):
var a, b, c;
for (var i = 100; i < 1000; i++) {
a = parseInt(i / 100);
b = parseInt((i / 10) % 10);
c = parseInt(i % 10);
if (i == a * a * a + b * b * b + c * c * c) {
console.log(i);
}
}
6.百马百担问题,有100匹马,驮100担货,大马驮3担,中马驮2担,2匹小马驮1担,求大、中、小各多少匹?
方法一:
for (var i = 0; i < 100; i++) {
for (var j = 0; j < 100; j++) {
for (var k = 0; k < 100; k++) {
if ((i + j + k == 100) && (i * 3 + j * 2 + k / 2 == 100)) {
console.log(i, j, k);
}
}
}
}
方法二:
for(x=0;x<=33;x++){
for(y=0;y<=50;y++){
for(z=0;z<=100;z++){
if(x+y+z==100&&x*3+y*2+z*0.5==100){
console.log(x,y,z);
}
}
}
}
方法三:
for (var i = 0; i <= 33; i++) { // 大马最多33匹
for (var j = 0; j <= 50; j++) { // 中马最多50匹
var k = 100 - i - j
if (k % 2 == 0 && k > 0) { // 小马最多100匹,且小马数量为偶数
if (i * 3 + j * 2 + k / 2 == 100) { // 总数量为100匹
console.log("大马:" + i + "匹,中马:" + j + "匹,小马:" + k + "对");
}
}
}
}
7.猴子有一堆桃,第一天吃了一半发现不过瘾,又多吃了一个,第二天起来吃了剩下桃子的一半,发现不过瘾,又多吃了一个.....第十天猴子只剩一个桃了,问:这堆桃有几个
var num = 1
for (var i = 9; i >= 1; i--) {
num = (num + 1) * 2
}
console.log("这堆桃有" + num + "个");
8.岛上五只猴,突然有一天天上掉下一堆桃子,由于天色渐晚,猴子们决定第二天再分桃,第二天第一只猴起来了,把桃子平均分成五份,发现多了一个,扔海里了,拿走自己的那一份, 第二个猴起来以为自己是第一个到的,把剩下的桃平均分成五份,拿走自己的那一份,发现多了一个,扔海里了,....直到第五只猴起来,以为自己是第一个到的,把剩下的桃平均分成五份,发现刚刚好,问:这堆桃最少有几个
方法一:
// 设最后每份有num个桃子
var num = 1
// 第5只猴子的时候有5*num个桃子
while (true) {
var m = num * 5
var f = 1
for (var i = 4; i >= 1; i--) {
m = m * (5 / 4) + 1
if (m % 1 != 0) {
f = 0
break
}
}
if (f == 1) {
break
}
num++
}
console.log("这堆桃最少有" + m + "个")
方法二:
for (var i = 0; ; i++) {
//a-e(第1只到5只猴子分到的桃子)
var a = (i - 1) / 5;//499
var b = (4 * a - 1) / 5;//399
var c = (4 * b - 1) / 5;//319
var d = (4 * c - 1) / 5;//255
var e = 4 * d / 5;//204
if (a % 1 == 0 && b % 1 == 0 && c % 1 == 0 && d % 1 == 0 && e % 1 == 0) {
console.log(i);
break;
}
}
9.打印一个数的所有因数
var num = Number(prompt("请输入一个数"))
console.log(num + "的所有因数有:");
for (var i = 1; i <= num; i++) {
if (num % i == 0) {
console.log(i);
}
}
10.入职薪水10K,每年涨幅5 %,50年后工资多少?
var salary = 10000;
for (var i = 1; i <= 50; i++) {
salary += salary * 0.05
}
console.log("50年后工资为" + salary);
11.逢7过游戏,打印1 - 100,遇到能被7整除或者带7的数字打印“过”代替
for (var i = 1; i <= 100; i++) {
(i % 7 == 0) || (i % 10 == 7) || (i / 10 % 10 == 7) ? console.log("过") : console.log(i)
}
12.求出1 - 1 / 2 + 1 / 3 - 1 / 4……1 / 100的和
var sum = 0
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
sum -= 1 / i
} else {
sum += 1 / i
}
}
console.log(" 1 - 1 / 2 + 1 / 3 - 1 / 4……1 / 100的和为:" + sum);
13.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米(27次)
var h = 0.0001;
var sum = 0;
while (h < 8848) {
h = h * 2;
sum++
}
console.log("对折" + sum + "次厚度超过珠峰高度8848米");
14.打印出1000 - 2000年中所有的闰年,并以每行四个数的形式输出
var sum = 0;
for (var i = 1000; i <= 2000; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
document.write(i + " ");
sum++
if (sum % 4 == 0) {
document.write("<br>")
}
}
}
15.求1 + 2! + 3! +…+20!的值
for (var i = 1, sum = 0; i <= 20; i++) {
var count = 1
for (var j = 1; j <= i; j++) {
count *= j
}
sum += count
}
console.log("1 + 2! + 3! +…+20!的值为:" + sum);
16.计算100的阶乘
var count = 1
for (var i = 1; i <= 100; i++) {
count *= i
}
console.log("100的阶乘为:" + count);
17.小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元整好花掉,可如有哪些购买结合?
for (var i = 1; i <= 6; i++) {
for (var j = 1; j <= 40; j++) {
for (var k = 1; k <= 16; k++) {
if (i * 15 + j * 2 + k * 5 == 100) {
console.log("洗发水" + i + "支,香皂" + j + "支,牙刷" + k + "支");
}
}
}
}
18.公鸡五块一只 母鸡3块三只小鸡1块钱 100块钱买一百只鸡 有几种方法?
for (var i = 0; i <= 100; i++) {
for (var j = 0; j <= 100; j++) {
for (var k = 0; k <= 100; k++) {
if ((i + j + k == 100) && (5 * i + 3 * j + k / 3 == 100)) {
console.log(i + "公鸡" + j + "母鸡" + k + "小鸡");
}
}
}
}
19.1,2,5元钱 凑满40元有多少种可能
var sum = 0;
for (var i = 1; i <= 33; i++) {
for (var j = 1; j < 17; j++) {
for (var k = 1; k < 7; k++) {
if (i + j * 2 + k * 5 == 40) {
sum++;
}
}
}
}
console.log("1,2,5元钱 凑满40元有" + sum + "种可能");
20.五个小朋友排成一队, 问第一个多大了,第一个说比第二个大两岁,问第二个,第二个说比第 三个大两岁,以此类推。问第五个小朋友几岁了,第五个小朋友说3岁了。问第一个小朋友几岁
var age = 3
for (var i = 4; i >= 1; i--) {
age += 2
}
console.log("第五个小朋友是" + age + "岁了");
21.用户输入打印相对应行列的星星
let num = prompt('请输入打印的行列数')
for (let x = 1; x <= num; x++) {
document.write('<br>')
for (let j = 1; j <= num; j++) {
document.write('*')
}
}
22.倒等腰三角
var n = Number(prompt("请输入行数"));
for (var i = n; i > 0; i--) {
// 打印空格
for (var k = 0; k < n - i; k++) {
document.write(" ");
}
// 打印星星
for (var j = 0; j < 2 * i - 1; j++) {
document.write("*");
}
// 换行
document.write("<br>");
}
23.正直角
var n = Number(prompt("请输入行数"));
for (var i = n; i > 0; i--) {
for (var j = 0; j < n - i; j++) {
document.write("*");
}
// 换行
document.write("<br>");
}
24.等腰三角形
var n = Number(prompt("请输入行数"));
for (var i = 1; i <= n; i++) {
// 打印空格
for (var k = 0; k < n - i; k++) {
document.write(" ");
}
// 打印星星
for (var j = 0; j < 2 * i - 1; j++) {
document.write("*");
}
// 换行
document.write("<br>");
}
25.求1 - 100所有奇数和偶数的和
var odd = 0
var even = 0
for (var i = 0; i <= 100; i++) {
// 写法一
// i % 2 == 0 ? even += i : odd += i
// 写法二
if (i % 2 == 0) {
even += i
} else {
odd += i
}
}
console.log("1 - 100所有奇数和为:" + odd + "偶数的和为:" + even);
26.输入一个日期(年月日)判断这是这一年的第几天
// 平年365天(2月28天),闰年366年(2月29天)
var year = Number(prompt("请输入年份"));
var month = Number(prompt("请输入月份"));
var day = Number(prompt("请输入日期"));
var sum = 0
for (var i = 1; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
sum += 31
break
case 2:
// 判断是否是闰年------平年365天(2月28天),闰年366年(2月29天)
// m----2月的天数
var m = (year % 400 == 0) || (year % 4 == 0 && year % 100 !== 0) ? 29 : 28
sum += m
break
case 4:
case 6:
case 9:
case 11:
day += 30;
break
}
}
sum += day
console.log(year + "年" + month + "月" + day + "日是这一年的第" + sum + "天");
27.有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问8个月后有多少对兔子,幼兔、小兔、成兔对数分别是多少
var child = 1// 初始有1对幼兔
var min = 0 // 初始没有小兔
var adult = 0 // 初始没有成兔
for (var m = 1; m <= 8; m++) {
adult += min
min = child
child = adult
console.log("第" + m + "个月后有" + child + "对幼兔," + min + "对小兔," + adult + "对成兔");
}
28.羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能?
// 羽毛球拍最多13个,球最多61个,水至少91个
var sum = 0
for (var i = 1; i <= 13; i++) {
for (var j = 1; j <= 61; j++) {
for (var k = 1; k <= 91; k++) {
if (i * 15 + j * 3 + k * 2 == 200) {
sum++
}
}
}
}
console.log("有" + sum + "种可能");
29.括号里面只能放加或减,如果要使等式成立,括号里面应该放什么运算符----------12()34()56()78()9 = 59
outer: //标识最外层循环
for (var a = -1; a <= 1; a += 2) {
for (var b = -1; b <= 1; b += 2) {
for (var c = -1; c <= 1; c += 2) {
for (var d = -1; d <= 1; d += 2) {
if (12 + 34 * a + 56 * b + 78 * c + 9 * d == 59) {
console.log(a, b, c, d);
break outer; //退出外层循环
}
}
}
}
}
30.有一个台阶,如果一次跨2个,则最后剩下1阶,如果一次跨3个,则最后剩下2阶,如果一次跨5个,则最后剩下4阶,如果一次跨6个,则最后剩下5阶,如果一次跨7个,则刚刚好跨完,请问这个台阶最少为多少阶。
var i = 1
while (true) {
if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5 && i % 7 == 0) {
console.log("这个台阶最少为" + i + "阶");
break;
}
i++
}
31.有一篮球从5米高处自由落下,每次弹起的高度是上一次的1/3,当篮球弹起的高度小于0.1米以后就不再弹起了,请问,这个篮球会弹起多少次?
var h = 5
var sum = 0
while (h > 0.1) {
h = h / 3
sum++
}
console.log("这个篮球会弹起" + sum + "次");
32.题目:日本某地发生了了起谋杀案,警察通过排查确定杀人凶手为4个嫌疑犯的一个,以下为四个嫌疑犯的供词
A说:不是我
B说:是C
C说:是D
D说:C在胡说
已知三个人说了真话,一个人说了假话
for (var a = 0; a <= 1; a++) {
for (var b = 0; b <= 1; b++) {
for (var c = 0; c <= 1; c++) {
for (var d = 0; d <= 1; d++) {
var a_say = (a == 0)
var b_say = (c == 1)
var c_say = (d == 1)
var d_say = !c_say
if ((a_say + b_say + c_say + d_say == 3) && (a + b + c + d == 1)) {
a ? console.log("凶手是: A ") : "";
b ? console.log("凶手是: B ") : "";
c ? console.log("凶手是: C ") : "";
d ? console.log("凶手是: D ") : "";
}
}
}
}
}
33.5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
for (var a = 1; a < 6; a++) {
for (var b = 1; b < 6; b++) {
for (var c = 1; c < 6; c++) {
for (var d = 1; d < 6; d++) {
for (var e = 1; e < 6; e++) {
if (a != b && a != c && a != d && a != e && b != c && b != d && b != e && c != d && c != e && d != e) {
// A选手说:B第二,我第三。
if ((b == 2 && a != 3) || (b != 2 && a == 3)) {
// B选手说:我第二,E第四。
if ((b == 2 && e != 4) || (b != 2 && e == 4)) {
// C选手说:我第一,D第二。
if ((c == 1 && d != 2) || (c != 1 && d == 2)) {
// D选手说:C最后,我第三。
if ((c == 5 && c != 3) || (c != 5 && d == 3)) {
// E选手说:我第四,A第一。
if ((e == 4 && a != 1) || (e != 4 && a == 1)) {
console.log(a, b, c, d, e);
}
}
}
}
}
}
}
}
}
}
}
34.填写数字 设有算式如图所示,求出口中的数字,并打印出完整的算式
// a/b=809 a%b=1 被除数÷除数=商
// 根据图示可知除数是2位数,被除数是4位数,并且商在第二位上是8,首页被除数的首位最小都是8,除数最大只能为12
var a = 8
var b = 1
for (var a = 8000; a <= 9999; a++) {
for (var b = 10; b <= 12; b++) {
if ((a % b == 1) && (parseInt(a / b) == 809)) {
// 根据图示除数*9是一个三位数,所有要排除不是三位数的
if (9 * b >= 100) {
console.log(a, b);
}
}
}
}
35.分书问题,有A、B、C、D、E五本书,要分给张、王、李、赵、钱五位同学,每人只能选一本,事先让每人把自己喜爱的书填于下表,编程找出让每个人都满意的方案。
for (var i = 1; i <= 5; i++) {
for (var j = 1; j <= 5; j++) {
for (var k = 1; k <= 5; k++) {
for (var l = 1; l <= 5; l++) {
for (var m = 1; m <= 5; m++) {
if (i != j && i != k && i != l && i != m && j != k && j != l && j != m && k != l && k != m && l != m) {
if (i != 1 && i != 2 && i != 5) {
if (j != 3 && j != 4) {
if (k != 1 && k != 4 && k != 5) {
if (l != 3 && l != 5) {
if (m != 1 && m != 3 && m != 4) {
console.log(i, j, k, l, m);
}
}
}
}
}
}
}
}
}
}
}
36.猜测产品质量评奖 5家工厂的产品在一次评比中分获1,2,3,4,5,在公布结果前,已知E厂产品肯定不是第二、三名,五厂代表猜测评比结果
A厂的代表说:E厂一定能获得第一名。
B厂的代表说:我厂的产品可能获第二名。
C厂的代表说:A厂的产品质量最次。
D厂的代表说:C厂的产品不是最好的。
E厂的代表说:D厂的产品会获得第一名。
公布结果后,证明只有产品获第一名和第二名的两个厂的代表猜对了。求5个厂产品各获第几名。
for (var a = 1; a <= 5; a++) {
for (var b = 1; b <= 5; b++) {
for (var c = 1; c <= 5; c++) {
for (var d = 1; d <= 5; d++) {
for (var e = 1; e <= 5; e++) {
if (a != b && a != c && a != d && a != e && b != c && b != d && b != e && c != d && c != e && d != e && (a + b + c + d + e == 15)) {
if (e != 2 && e != 3) {
if ((a == 1) + (b == 2) + (a == 5) + (c != 1) + (d == 1) == 2) {
var a_say = (a <= 2 && e == 1)
var b_say = (b <= 2 && b == 2)
var c_say = (c <= 2 && a == 5)
var d_say = (d <= 2 && c != 1)
var e_say = (e < 2 && d == 1)
if (a_say + b_say + c_say + d_say + e_say == 2) {
console.log(a, b, c, d, e);
}
}
}
}
}
}
}
}
}
37.亲密数对 找出2---1000中的亲密数对。亲密数对的定义:如果a的因子和等于b,b的因子和等于a,且a!=b则称a,b为亲密数对。
(循环)方法一:
for (var a = 2; a <= 1000; a++) {
for (var b = a + 1; b <= 1000; b++) {
var sum1 = 0
var sum2 = 0
for (var i = 1; i < a; i++) {
if (a % i == 0) {
sum1 += i
}
}
for (var j = 1; j < b; j++) {
if (b % j == 0) {
sum2 += j
}
}
if (sum1 == b && sum2 == a && a != b) {
console.log(a + "," + b);
}
}
}
(函数) 方法二:
function factor(n) {
sum = 0
for (var i = 1; i <= n; i++) {
if (n % i == 0) {
sum += i
}
}
}
var a1 = +prompt("请输入第一个数")
var a2 = +prompt("请输入第二个数")
if (factor(a1) == factor(a2) && a1 != a2) {
alert("两个数是亲密数")
} else {
alert("两个数不是亲密数")
}
38.斐波拉契数 (递归)
var a = 0;
function add(i) {
if (i <= 2) {
return 1;
} else {
return add(i - 1) + add(i - 2);
}
}
console.log(add(10));
39.(递归)求岁数,有5个小朋友,第5个小朋友说我比第4个人大2岁,第4个小朋友说我比第3个人大2岁,以此类推到第一个小朋友说我10岁了,求第5个小朋友多少岁
function age(n) {
if (n === 1) {
return 10
} else {
return age(n - 1) + 2
}
}
console.log("第5个人的年龄是:" + age(5) + "岁");
40.求三个数中的最大数
function getMax(a, b, c) {
return (a > b ? a : b) > c ? (a > b ? a : b) : c;
}
console.log("12,99,45三个数中最大的数是:" + getMax(12, 99, 45));
41.给定一个星期几,求这个星期几后的某天是星期几
function getWeek(week, day) {
week = (week + day) % 7
switch (week) {
case 1:
return "星期一";
case 2:
return "星期二";
case 3:
return "星期三";
case 4:
return "星期四";
case 5:
return "星期五";
case 6:
return "星期六";
case 0:
return "星期日";
}
}
console.log("星期2的后30天是星期" + getWeek(2, 30));
42.给定一个年份,判断是否是闰年
function isLeapYear(year) {
return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0)
}
console.log(isLeapYear(+prompt("请输入年份")) ? "闰年" : "不是闰年")