JavaScript解决那些常见的算法题

时间:2023-02-09 18:05:03


1. 已知公鸡5元每只,母鸡3元每只,小鸡3只1元,100元可以买100只鸡,求公鸡、母鸡、小鸡可买多少只?

for (var i = 0; i <= 20; i++) {
for (var j = 0; j <= 33; j++) {
for (var z = 0; z <= 100; z++) {
if ((i + j + z == 100) && (5 * i + 3 * j + z / 3 == 100)) {
document.write('公鸡:' + i + '母鸡:' + j + '小鸡:' + z + '<hr/>');
}
}
}
}

或者还可以这样写

for (var i = 0; i <= 20; i++) {
for (var j = 0; j <= 33; j++) {
z = 100 - i - j;
if ((z % 3 == 0) && (5 * i + 3 * j + z / 3 == 100)) {
document.write('公鸡:' + i + '母鸡:' + j + '小鸡:' + z + '<hr/>');
}
}
}

2. 已知1、2 、3 、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

var count = 0;                    
for (var i = 1; i <= 4; i++) {
for (var j = 1; j <= 4; j++) {
if (i != j) {
for (var k = 1; k <= 4; k++) {
if (j != k && k != i) {
console.log("" + i + j + k);
count++;
}
}
}
}
};
console.log("共" + count + "次循环");

3. 请用JavaScript输出一个国际象棋棋盘。

for (var r = 0, str = ""; r < 8; r++) {
for (var c = 0; c < 8; c++) {
str += (r + c) % 2 == 0 ? "□" : "■";
}
str += "\n";
}
console.log(str);

4. 鸡兔同笼,共48只132条腿,求鸡和兔各有多少只?

function start(a,b){
var x=0;
var y=0;
for(var x=0;x<a; x++){
y=48-x;
if (2*x+4*y==b){
console.log("鸡有"+x+"只,兔有"+y+"只");
}
}
}

5. 将一个正整数分解质因数。例如:输入90, 打印出 2*3*3*5

function decompose(n){
var arr=[];
for(var i=2;i<=n;i++){
while(n%i==0){
arr.push(i);
n/=i;
}
}
return arr.join("*");
}
console.log(decompose(90));

6. 随机按规则输出双色球的号码。

function doubleBall() {
var reds = [];
while (reds.length < 6) {
var r = parseInt(Math.random() * 33 + 1);
for (var i = 0; i < reds.length; i++) {
if (r == reds[i]) {
break;
};
if (i == reds.length) {
reds.push(r);
};
}
}
function cmp(a, b) {
return a - b;
}
reds.sort(cmp);
var blue = parseInt(Math.random() * 16 + 1);
return String(reds) + "|" + blue;
}
document.write(doubleBall());

7. 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总数为多少?

这个是典型的fibbnacci数列,即数列从第3项开始,每一项都等于前两项之和,如 1,1,2,3,5,8,13,21,34,55

function fib(n){
if(n<3){
return 1;
}else{
return fib(n-1)+fib(n-2);
}
}
console.log(fib(10));

以上是采用的递归方法,但是效率极低,建议用循环代替,代码如下:

function fib(n){
if(n<3){
return 1;
}else{
var a=1,b= 1,c;
for(var i=3;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
}
console.log(fib(10));

8. 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少?

for(var i=10,sum=1;i>1;i--){
sum+=1;
sum*=2;
}
console.log(sum);

9. 1~100之间奇数和与偶数和分别是多少?

9.1. 1~100之间奇数和

var sum=0;
for(var i=1;i<=100;i++){
if(i%2==1){
sum+=i;
}
}
document.write('1~100之间奇数的和为:'+sum+'<hr/>');

9.2. 1~100之间偶数和

var sum=0;
for(var i=1;i<=100;i++){
if(i%2==0){
sum+=i;
}
}
document.write('1~100之间偶数的和为:'+sum+'<hr/>');

10. 输入一个数,判断它是素数还是合数?

function isPrime(n){
if(n<=3){
return true;
}else{
for(var i=2;i<=Math.sqrt(n);i++){
if(n%i==0){
return false;
}
}
}
}
console.log(isPrime(17));

11. 分别打印出正序和倒序9*9乘法表。

11.1. 正序的9*9乘法表

document.write('<table border="1" cellpadding="0" cellspacing="0" bgcolor="#ABCDEF" width="80%">');
for(var i=1;i<=9;++i){
document.write('<tr>');
for(var j=1;j<=i;j++){
document.write('<td>'+i+'x'+j+'='+(i*j)+'</td>');
}
document.write('</tr>');
}
document.write('</table>');

11.2. 倒序的9*9乘法表

document.write("<table border='1' cellpadding='0' cellspacing='0' bgcolor='aqua' width='80%'>");
for(var i=9;i>=1;i--){
document.write('<tr>');
for(var j=1;j<=i;j++){
document.write('<td>'+i+'x'+j+'='+(i*j)+'</td>');
}
document.write('</tr>');
}
document.write('</table>');

12. 用*输出一个等腰三角形

function triangle(ln){
for(var r=1;r<=ln;r++){
for(var i= 1,str="";i<=ln+r-1;i++){
str+=i<=ln-r?" ":"*";
}
console.log(str);
}
}
triangle(5)