21、题目:求1+2!+3!+…+20!的和
程序分析:此程序只是把累加变成了累乘。
<script>
var sum = 0;
for(var i = 1;i <= 20;i++){
var a = 1;
for(var j = i;j > 0;j--){
a *= j;
}
sum += a;
}
alert('和为' + sum);
</script>
22、题目:利用递归方法求5!。
程序分析:递归公式:fn=fn_1*4!
方法一递归:
<script>
function text(a) {
if(a == 0 || a == 1){
return 1;
}else {
return a * text(a - 1)
}
}
alert('5!为' + text(5))
</script>
方法二:
<script>
var a = prompt('输入要求阶层的数');
var sum = 1;
if(a == 0 && a == 1){
alert(1);
}
for(var i = 1;i <= a;i++){
sum *= i;
}
alert(sum);
</script>
23、题目:打印出 100-1000之间所有的“水仙花数”;
说明:所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身,本题没有返回值,请把每一个答案使用console.log 打印在控制台。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
<script>
for(var i = 100;i < 1000;i++){
var a = parseInt(i / 100);
var b = parseInt(i / 10 % 10);
var c = parseInt(i % 10);
if(i == a * a * a + b * b * b + c * c * c){
console.log('水仙花数为' + i);
}
}
</script>
24、题目: 桌上有 n 堆硬币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,只能拿走其中的一枚或者两枚,
求拿完所有硬币的最少次数。
示例:
输入:[4,2,1]
输出:4
解释:第一堆最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完
<script>
var coins = [1,2,4];
var sum = 0;
for(var i = 0;i < coins.length;i++){
if(coins[i] % 2 == 0){
sum += coins[i] / 2;
}else {
sum += (coins[i] + 1) / 2;
}
}
alert('最少次数为' + sum);
</script>
25、题目:小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3
<script>
var guess = [];
var answer = [];
var sum = 0;
for(var i = 0;i < 3;i++){
var m =Math.floor(Math.random() * 3 + 1);
guess.push(m);
}
alert('小A选择的数为' + guess);
for(var j = 0;j < 3;j++){
var n = Math.floor(Math.random() * 3 + 1);
answer.push(n);
if(guess[j] == answer[j]){
sum++;
}
}
alert('小B选择的数为' + answer);
alert('小A猜对了' + sum + '次');
</script>
26、题目:打印出杨辉三角形
<script>
function f(a,b) {
//a代表第几行 b代表第几个
if(a == 1){
//每一行的第一个为1
return 1;
}else if(b == 1 || a == b){
//每一行的最后一个为1
return 1;
}else {
return f(a - 1,b) + f(a - 1,b - 1)
}
}
function ff(sum) {
//控制行
for(var i = 1;i <= sum;i++){
for(var j = 1;j <= i;j++){
document.write(f(i,j) + '\n');
}
document.write('
');
}
}
ff(8);
</script>
27、题目:约瑟夫环:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
问最后留下的是原来的第几号。
var a = [];
for(var i = 0;i <= 5;i++){
a[i] = new Array(i + 1);
}
for(var i = 0;i <= 5;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]
}
}
}
for(var i = 0;i <= 5;i++){
var b = '';
for(var j = 0;j <= 10 - i - 1;j++){
b += ' '
}
console.log(b+a[i])
}
28、题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
<script>
function text(m) {
if(m == 1){
return 10;
}else {
return text(m - 1) + 2;
}
}
alert('第五个人' +text(5) +'岁')
</script>
29、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
<script>
var i = prompt("请输入五位数");
var a = parseInt(i / 10000);
var b = parseInt(i % 10);
var c = parseInt(i / 1000 % 10);
var d = parseInt(i / 100 % 10);
if(a == b || c == d){
alert('这个数是回文数' + i)
}else {
alert('这个数不是回文数' + i)
}
</script>
30、题目:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。
<script>
function text(array) {
var a = 0,b = 0;
for(var i = 0;i < array.length - 1;i++){
a = i;
for(var j = i + 1;j < array.length;j++){
if(array[j] < array[a]){
a = j;
}
}
b = array[i];
array[i] = array[a];
array[a] = b;
}
return array;
}
alert(text([3,2,5,1,6,7,8,9,4,11]));
</script>