写在前面
本文代码均在html中script标签中运行,执行代码打开浏览器可查看代码输出情况.
网上找的题都是45道题,答案各种语言版本千奇百怪,特地整理了适合js的版本.
//1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
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){
console.log(i,j,k)
count++;
}
}
}
}
document.write("能组成" + count + "个这样的数")
/*2.企业发放的奖金(bonus)根据利润(profit)提成。
利润低于或等于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%提成,从键盘输入当月利润,求应发放奖金总数?*/
var profit = Number(prompt("请输入当月利润"));
bonus = 0;
if (profit >0 && profit <=100000){
bonus = profit*0.1;
}else if (profit >100000 && profit <=200000){
bonus = 10000+(profit-100000)*0.075;
}else if (profit >200000 && profit <=400000){
bonus = 17500+(profit-200000)*0.05;
}else if (profit >400000 && profit <=600000){
bonus = 27500+(profit-400000)*0.03;
}else if (profit >600000 && profit <=1000000){
bonus = 33500+(profit-600000)*0.015;
}else if (profit >1000000){
bonus = 39500+(profit-1000000)*0.01;
}document.write('应发放奖金总数'+bonus);
3.一个整数,它加上100后是一-个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
for(var i=-10000;i<10000;i++){
a = parseInt(Math.sqrt(i+100));
b = parseInt(Math.sqrt(i+268));
if(a*a===(i+100)&&b*b===(i+268)){
document.write(i,"<br>");
}
}
//4.输入某年某月某日,判断这一天是这一年的第几天?
//利用switch语句
var year = Number(prompt("请输入年份"));
var month = Number(prompt("请输入月份"));
var day = Number(prompt("请输入天数"));
var sum = 0;//记录总天数
switch(month-1){
case 11:sum+=30;
case 10:sum+=31;
case 9:sum+=30;
case 8:sum+=31;
case 7:sum+=31;
case 6:sum+=30;
case 5:sum+=31;
case 4:sum+=30;
case 3:sum+=30;
case 2:sum+=28;
case 1:sum+=31;
case 0:sum+=day;
}
if(month>2){
if(year%400 == 0 || year%4 == 0 && year%100 != 0){
sum++;
}
}
document.write(sum);
//利用数组运算
var year = Number(prompt("请输入年份"));
var month = Number(prompt("请输入月份"));
var day = Number(prompt("请输入天数"));
var days = [31,28,31,30,31,30,31,31,30,31,30,31];
var sum = 0;
for(var i=1;i<=month-1;i++){
sum += days[i-1];
}
if(month>2){
if(year%400 == 0 || year%4 == 0 && year%100 != 0){
sum++;
}
}
sum += day;
document.write(sum);
//5.输入三个整数x,y,z,请把这三个数由小到大输出。
var x = Number(prompt("请输入第一个整数"));
var y = Number(prompt("请输入第二个整数"));
var z = Number(prompt("请输入第三个整数"));
var c = 0;
if(x > y){
c = y;
y = x;
x = c;
}
if(x > z){
c = z;
z = x;
x = c;
}
if(y > z){
c = z;
z = y;
y = c;
}
document.write("按从小到大的顺序排列输入的整数"+ " "+ x +" " + y + " " + z);
//6.用*号输出字母C的图案。
for(var i=1;i<=5;i++){
switch(i){
case 1: case 5:
document.write(" ***");
document.write("<br>");
break;
case 2: case 4:
document.write(" *");
document.write("<br>");
break;
case 3 :
document.write("*");
document.write("<br>");
break;
default:
break;
}
}
// 7.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
var num = 90;
var a = num+'=';
for(var i=2;i<=num;i++){
if(num%i===0){
num/=i;
a+=i+'*'
i=1;
}
}
a = a.slice(0,a.length-1)
document.write(a)
// 8.输出9*9口诀。
for(var i=1;i<=9;i++){
for(var j=1;j<=i;j++){
document.write(i + "*" + j + "=" + i*j + " ");
if((i == 3 || i == 4)&&j == 2){
document.write(" ");
}
}document.write("<br>");
}
// 9.要求输出国际象棋棋盘
for(var i=1;i<=8;i++){
for(var j=1;j<=8;j++){
if((i+j)%2===0) {
document.write("□ ");
}else{
document.write("■ ");
}
}document.write("<br>");
}
// 10.古典问题:有1对兔子,从出生后第3个月起每个月都生1对兔子,小兔子长到第3个月后每个月又生1对兔子,假如兔子都不死,问每个月的兔子总数为多少?(斐波那契数列)
//显然在图中,我们的黑点表示的是成熟兔子,白点表示的是小兔子。我们够仔细的话能够发现,右边这一列数字是有规律的。第一个数和第二个数为1,之后的每一个数为之前两个数之和。比如,六月份的兔子数量为四月份和五月份兔子数量之和,即8=5+3。
//(此外,我们再仔细看一下,六月份的兔子中有五对黑(成熟)兔子和三对白兔子, 8=5+3。同样是8=5+3,但是该等式和上式中的5与3表示了不同的意义,那么他们之间有木有本质的联系呢。实际上5对黑兔子不就是上个月的5对兔子变来的嘛,只不过其中的白兔子都变为了黑兔子,即5=5; 三只白兔子从哪来的,它们是四月份的三对兔子生的,不管黑白,到了五月份都是黑兔子,六月份的时候也就只有它们能生小兔子,而且必须生一对小兔子,所以3=3。)
function r(n){
var r1 = 1,r2 = 1;//第一个月和第二个月各为一对
var m= " ";//中间值 m
for(var i=3;i<=n;i++){
m = r1;//新一代的兔子由第一月的老兔子生来的
r1 = r2;// 第二月未成熟的兔子在第三月变成熟
r2 = m + r1;//总和
}
return "兔子的总和数是"+r2;
}
document.write(r(prompt("请输入月数")));
// 递归思想解决
function f(n){
if(n == 0||n == 1){
return 1;
}
return f(n-1)+f(n-2);
}
document.write(f(prompt("请输入月数")));
//11.判断101-200之间有多少质数,并输出所有质数。
//能被1和数字自己本身整除的数叫质数,如果整除次数等于两次就是质数
for(var sum = 0,var i=101;i<=200;i++){
for(var count = 0,var j=1;j<=i;j++){
if(i%j == 0){
count ++;
}
}
if (count == 2){
sum++;
document.write(i);
document.write("<br>");
}
}
document.write("共有"+sum+"个质数");
// 12.题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”, 因为153=1 的三次方+5的三次方+3的三次方。
for(var i=1;i<10;i++){
for(var j=0;j<10;j++){
for(var k=0;k<10;k++){
sum = 100*i+10*j+k;
if((i*i*i)+(j*j*j)+(k*k*k) === sum){
document.write(sum);
document.write("<br>");
}
}
}
}
// 13.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89 分之间的用B表示,6 0分以下的用C表示。
score = Number(prompt("请输入百分制的分数"));
level = "";
if(score >= 90){
level = "A";
}else if(score >= 60 && score <= 89){
level = "B";
}else level = "C";
document.write("该分数的等级是" + level);
//14.输入两个正整数m和n,求其最大公约数和最小公倍数。
var m = Number(prompt("请输入一个正整数"));
var n = Number(prompt("请输入一个正整数"));
var l = m*n;
if(m<n){//比较大小,把大的数放前面
temp = m;
m = n;
n = temp;
}
while(m!=0){//辗转相除到余数是为0为止
//(基本原理如下:
用欧几里德算法(辗转相除法)求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数))
g = n%m;
n = m;
m = g;
}
document.write("最大公约数是"+ n);
document.write("最小公倍数是"+ (l/n));
15.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
function statistics(x){
// 常用的Unicode值范围
// 汉字:[0x4e00,0x9fa5](或十进制[19968,40869])
// 数字:[0x30,0x39](或十进制[48, 57])
// 小写字母:[0x61,0x7a](或十进制[97, 122])
// 大写字母:[0x41,0x5a](或十进制[65, 90])
//空格:十进制32
var script = 0,letter = 0,blank = 0,digit = 0,charset = 0;
for(var i=0;i<x.length;i++){
a = x.charCodeAt(i)
if(a >= 19968){
script++;
}else if((a >= 65 && a<=90) || (a >=97 && a<=122)){
letter++;
}else if(a >= 48 && a <= 57){
digit++;
}else if(a === 32){
blank++;
}else{
charset++;
}
}
return "中文有:"+script+"个,英文有:"+letter+"个,数字有:"+digit+"个,空格有:"+blank+"个,其他字符有:"+charset+"个";
}
document.write(statistics(prompt()));
// 16.求s=a+aa+aaa+aaa+…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
function add(a,b){
var a = Number(prompt("请输入一个数字"));
var b = Number(prompt("循环相加多少次?"));
var newnumber = 0;
var total = 0;
for(var i=0;i<b;i++){
newnumber = newnumber * 10 + a;
if(i>0){
document.write("+");
}
document.write(newnumber);
total += newnumber;
}
return document.write("=" + total);
}
add();
// 17.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
for(var i=1;i<1000;i++){
k = 0;
for(var j=1;j<i;j++){//j是因子
if(i%j == 0){
k += j;
}
}
if(i == k){
document.write(i);
document.write("<br>");
}
}
// 18.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
var j = 100;
var L = 0;
for(var i=1;i<=10;i++){
L += j;
j /= 2;
}
document.write("共经过"+L+"米");
document.write("<br>");
document.write("第10次反弹"+j+"米");
// 19.猴子吃桃问题:猴子第一天摘下若干个桃子, 当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
var t=1;
for(var i=1;i<10;i++){
t = (t+1)*2;
}
document.write(t);
document.write("<br>");
// 20.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
x ="x".charCodeAt();
y ="y".charCodeAt();
z ="z".charCodeAt();
for(var a=x;a<=z;a++){
for(var b=x;b<=z;b++){
for(var c=x;c<=z;c++){
if(a!=b&&b!=c&&a!=c&&a!=x&&c!=x&&c!=z){
document.write("a的对手是" + String.fromCharCode(a) + "<br>" + "b的对手是" +String.fromCharCode(b)+ "<br>" + "c的对手是" +String.fromCharCode(c));
}
}
}
}
// 21.有一分数序列: 2/1, 3/2, 5/3, 8/5,13/8, 21/13… 求出这个数列的前20项之和。
var a = 2;
var b = 1;
var sum = 0;
for(var i=1;i<=20;i++){
sum += (a/b);
temp = b;
b = a;
a = temp + a;
}
document.write(sum);
// 22.求1+2!+3!+…+20!的和。
var sum = 0;
var a = 1;
for(i=1;i<=20;i++){
a *= i;
sum += a;
}
document.write(sum);
// 23.利用递归方法求5!。
function a(x){
if(x==1){
return 1;
}else
return x*a(x-1);
}
document.write(a(5));
// 24.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
function versa(x){
if(x.length<=1){
return x;
}else{
return x.charAt(x.length-1) + versa(x.slice(0,x.length-1));
}
}
document.write(versa(prompt("请输入字符")));
// 25.有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人,他说是10岁。请问第五个人多大?
var age = 10;
for(var i=1;i<5;i++){
age +=2;
}
document.write(age);
// 26.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
function num(x){
a = x.toString();
s = a.length-1,e = '';
for(var i=0;s>=0;s--){
e += a[s];
i++;
}
document.write("是一个"+i+"位数,逆序打印:"+e)
}
num(prompt("请输入一个不多于5位的正整数"));
// 27.题目: 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
var a = Number(prompt("请输入一个五位数"));//如果不限位数的话用.length确定位数
var wan = parseInt(a/10000);
var qian = parseInt(a%10000/1000);
var shi = parseInt(a%100/10);
var ge = parseInt(a%10);
if(wan==ge&&qian==shi){
document.write(a+"是回文数");
}else{
document.write(a+"不是回文数");
}
//先转字符串再获取字符串的字符
function palindromic(x){
a = x.toString();
g = parseInt(a.length/2);
for(var i=0;i<g;i++){
if(a[i]!==a[a.length-1-i]){
return document.write(x+"不是回文数");
}
}
return document.write(x+"是回文数");
}
palindromic(12321);
// 28.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样, 则继续判断第二个字母。
//monday thuesday wednesday thursday friday saturday sunday
function week(x){
var a = prompt("请输入第一个字母");
if(a != "m" &&a != "t"&&a != "w"&&a != "f"&&a != "s"){
document.write("您输入的字母不是星期英文字母");
}else if(a == "m"){
document.write("Monday");
}else if(a == "w"){
document.write("Wednesday");
}else if(a == "f"){
document.write("Friday");
}else if(a == "t"||a == "s"){
b = prompt("请输入第二个字母");
if(b != "h"&&b != "a"&&b != "u"){
document.write("您输入的字母不是星期英文字母");
}else if(b == "a" ){
document.write("Saturday");
}else if(b == "u"){
document.write("Sunday")
}else if (b == "h"){
c = prompt("请输入第三个字母");
if(c != "u"){
document.write("您输入的字母不是星期英文字母");
}else if(c == "u"){
d = prompt("请输入第四个字母");
if(d != e&&d != r){
document.write("您输入的字母不是星期英文字母");
}else if(d == "e"){
document.write("Thuesday");
}else if(d == "r"){
document.write("Thursday");
}
}
}
}
}
week();
// 29.对10个数进行排序。
//循环遍历数组,找出数组中最大的数,依次替换数组中的数字,直到第五位
var a = [3,45,50,6,88];
for(var i=0;i<a.length;i++){
for(var j=0;j<a.length;j++){
// document.write("i="+i+","+"a["+i+"]是"+a[i]);
// document.write("<br>");
// document.write("j="+j+","+"a["+j+"]是"+a[j]);
// document.write("<br>");
// document.write(a);
// document.write("<br>");
if(a[i]<a[j]){
x = a[i];
a[i] = a[j]
a[j] = x;
// document.write(a);
// document.write("<br>");
}
}
}
document.write(a);
// 30.求一个3*3矩阵对角线元素这和。
var a = [[12,45,78],
[23,56,89],
[41,52,63]];
document.write(a[0][0]+a[1][1]+a[2][2]);
document.write("<br>");
document.write(a[0][2]+a[1][1]+a[2][0]);
// 31.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
function rank(x){
var a= [3,6,9,15,20,88];
a[a.length] = x;
for(var i=0;i<a.length;i++){
for(var j=0;j<a.length;j++){
if(a[i]<a[j]){
c = a[i];
a[i] = a[j];
a[j] = c;
}
}
}
return document.write(a);
}
rank(10);
// 32.将一个数组逆序输出。
var a = [10,11,12,13,14,15];
var b = [];
var i=0;
for(var j=a.length;j>0;j--){
b[i] = a[j-1];
i++;
}
// 33.打印出杨辉三角形(要求打印出10行如下图)
a = [];
for(var i=0;i<=10;i++){
a[i] = new Array();
}
for(var i=0;i<=10;i++){
for(var j=0;j<=i;j++){
if(j===0||j===i){
a[i][j] = 1;
}else{
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
document.write(a[i][j]+" ");
if(i==j){
document.write("<br>");
}
}
}
// 34.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
var a = [8,12,87,56,32,46,5,48];
var max = a[0],x = 0;
var min = a[0],n = 0;
for(var i=0;i<a.length;i++){
if(max<a[i]){
max = a[i];
x = i;
}
if(min>a[i]){
min = a[i];
n = i;
}
}
b = a[0];
a[0] = max;
a[x] = b;
c = a[a.length-1];
a[a.length-1] = min;
a[n] = c;
document.write(a);
// 35.有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.
var n = [12,45,78,13,46,79,17,28,39,47];
var a = n.slice(-5);
document.write(a.concat(n));
// 36.题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
//数组解决
var arr =[];
var a = 0;
for(var i = 0;i<10;i++){
arr.push(i);
}
num = (arr.length-1);//固定初始数组的长度
for(var i=0;i<num;i++){//10个人剩一个人删了九个人
for(var j=0;j<2;j++){//每第三个人删一次
a++;
if(a>arr.length-1){//数组每次循环都会删减,而a会自增,删无可删时从零开始
a = 0;
}
}
arr.splice(a,1);//在位置a删除后一个元素,可选添加新元素
}document.write(arr);
//递归算法解决
//ysf(n,m,i)总人数n,报数m出局,第i个人出局,编号(k-1+n)%n的出局
// 如果报数3出局:ysf(10,3,2)=ysf(9,3,1)+3=5
// 如果报数6出局:ysf(10,6,1)=5,ysf(10,6,2)=1=(ysf(9,6,1)+6)%10
// 即ysf(n,m,i)=ysf((n-1,m,i-1)+m)%10 i!=1
function ysf(n,m){//设f(n,k,i)为n个人的环,报数为m
if(n == 1){
return 0;
}else{
return (ysf(n-1,m)+m)%n;
}
}
n = prompt("请输入一共多少个人");
m = prompt("报数到几退出");
document.write(ysf(n,m));
// 37.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
function main(a){
var a = (prompt("请输入一个字符串"));
l = a.length
document.write("该字符串的长度是",l);
}
main();
// 38.编写一个函数,输入n位偶数时,调用函数1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n
function a(x){
var x = prompt("请输入一个正数")
var sum = 0;
for(var i=x;i>1;i-=2){
sum += 1/i;
}
return document.write(sum);
}
a();
// 39.海滩上有一堆桃子,五只猴子来分。
// 第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
// 第二只猴子把剩下的桃子又平均分为五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
// 第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
var n = 6;//能除以5余1
while(true){
n = n + 5;
index =n;
var t = 0;
for(var i=1;i<=5;i++){
if((index-1)%5 == 0){
index = (index-1)/5 *4;
t++;
}else{
break;
}
}
if(t == 5){
document.write(n);
break;
}
}
// 40. 809*??=800*??+9*??+1其中??代表的两位数.8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。(题目有问题,无解)
for(var i=10;i<=99;i++){
if(8*i>=10&&8*i<=99&&9*i>=100&&9*i<=999&&(809*i==800*i+9*i)){
document.write(i);
document.write("<br>");
document.write(809*i);
}
}
// 41.八进制转换为十进制
//十进制转为八进制直接用.toString(8)转
var num1=425;
var num2=0;
num1=num1.toString();
for(i=num1.length-1,root=1;i>=0;i--){
num2+=Number(num1[i])*root;
root*=8;
}
document.write(num2);
// 42.求0——7所能组成的奇数个数。
var i =0;
for(var a=0;a<=7;a++){
for(var b=0;b<=7;b++){
for(var c=0;c<=7;c++){
for(var d=0;d<=7;d++){
for(var e=0;e<=7;e++){
for(var f=0;f<=7;f++){
for(var g=0;g<=7;g++){
aa = a*1000000;
bb = b*100000;
cc = c*10000;
dd = d*1000;
ee = e*100;
ff = f*10;
sum = aa+bb+cc+dd+ee+ff+g;
if(sum%2!==0){
i++;
}
}
}
}
}
}
}
}
document.write(i);
// 43.一个偶数总能表示为两个素数之和。
//随机一个偶数n,从2~n里找出两个素数,条件是和等于这个偶数n.
var n = (Math.floor(Math.random()*1000+1)*2);//2~2000的随机数
var a = [];
for(var i =2;i<=n;i++){
count = 0;
for(var k=2;k<i;k++){
if(i%k == 0){
count++;
}
}
if(count == 0){
a.push(i);
}
}
document.write(a);
document.write("<br>");
for(var j=1;j<a.length;j++){
for(var k=1;k<=j;k++){
if(a[j]+a[k]==n){
document.write(n+"="+a[j]+"+"+a[k]);
document.write("<br>");
}
}
}
// 44.判断一个素数能被几个9整除
//这个题很奇怪,能被9整除本身就不是素数了,但是没找到其他描述情况,只能按照逻辑把代码写出来.
var n = prompt("请输入一个素数");
chushi = n;
//先判断输入的数是不是素数
var count = 0;
for(var i=2;i<n;i++){
if(n%i == 0){
count++;
break;
}
}
if(count !== 0){
document.write("你所输入的数不是素数")
}else if(n%9 != 0){
document.write(chushi+"能被0个9整除")
}else{for(var sum=0;n%9!=0;n-9,sum++){
n%9 == 0;
}}document.write(chushi+"能被"+sum+"个9整除")
// 45.题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换.
var a = "6572";
var aa =[];
var temp = 0;
var d = "";
for(var i=0;i<4;i++){
aa[i]=(Number(a[i])+5)%10
}
temp = aa[0];
aa[0] = aa[3];
aa[3] = temp;
temp = aa[1];
aa[1] = aa[2];
aa[2] = temp;
for(var i=0;i<4;i++){
d += Number(aa[i]);
}
document.write(d);