1、二维数组的两种优先遍历方式
//例:二维数组中记录了5名学生3个科目的考试成绩,请算出每名学生的平均成绩和各科的平均成绩
let a=[
["张三",78,84,90],
["李四",75,88,95],
["王五",70,90,86],
["赵六",79,85,91],
["冯七",90,87,90]
]
//行优先遍历方式
for(let i=0;i<a.length;i++){
let p1=0; //p1为学生3科总成绩
for(let j=1;j<a[i].length;j++){
p+=a[i][j];
}
console.log(`${a[i][0]}的平均成绩为:${(p1/(a[i].length-1)).toFixed(2)}分`)
}
//列优先遍历方式
let b=["语文","高数","计算机"];
for(let j=1;j<a[0].length;j++){
let p2=0; //p2为每科总成绩
for(let i=0;i<a.length;i++){
p+=a[i][j];
}
console.log(`${b[j-1]}的平均成绩为:${(p2/a.length).toFixed(2)}分`)
}
toFixed(2) ----把得出的结果四舍五入保留两位小数
2、扑克牌的洗牌发牌
//将54张扑克牌放入数组中,单击“洗牌”按钮,对数组中的扑克牌进行洗牌。单击“发牌”按钮,将
扑克牌分发给三个游戏者。
//创建数组为其赋值
let poker=new Array(54);
poker[0]="大王";
poker[1]="小王";
let flower=["♥","♣","♦","♠"];
let point=["A","2","3","4","5","6","7","8","9","10","J","Q","K"];
let i=2;
for(let j=0;j<flower.length;j++){
for(let k=0;k<point.length;k++){
poker[i]=`${flower[j]}${point[k]}`;
i++;
}
}
console.log(`原扑克牌:${poker}`)
//洗牌
function btnWash(){
for(let i=0;i<poker.length;i++){
let randomIndex=Number.parseInt(Math.random()*poker.length);
[poker[randomIndex],poker[i]]=[poker[i],poker[randomIndex]]
}
console.log(`洗完牌后:${poker}`)
}
//发牌
function btnSend(){
let p1=[];
let p2=[];
let p3=[]; //p1,p2,p3为3个玩家
for(let i=0;i<poker.length;i+=3){
p1.push(poker[i]);
p2.push(poker[i+1]);
p3.push(poker[i+2]);
}
p1.sort(function(a,b){
return a.slice(1).charCodeAt(0)-b.slice(1).charCodeAt(0); //截取元素获得其Ascii码
})
p2.sort(function(a,b){
return a.slice(1).charCodeAt(0)-b.slice(1).charCodeAt(0);
})
p3.sort(function(a,b){
return a.slice(1).charCodeAt(0)-b.slice(1).charCodeAt(0);
})
console.log(`p1:${p1}`);
console.log(`p2:${p2}`);
console.log(`p3:${p3}`);
}
3、约瑟夫环问题:17个人排成一圈。编号为0的人开始从1报数,凡报到3的倍数的人离开圈子。这样不断循环下去,圈子里的人将不断减少。当只剩下一个人时,问此人原来的位置是多少号?
//设当人出圈后,数组指定的元素为-1。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
1 | 2 | -1 | 4 | 5 | -1 | 7 | 8 | -1 | 10 | 11 | -1 | 13 | 14 | -1 | 16 | 17 |
-1 | 19 | 20 | -1 | 22 | 23 | -1 | 25 | 26 | -1 | 28 | 29 | |||||
-1 | 31 | 32 | -1 | 34 | 35 | -1 | 37 | |||||||||
38 | -1 | 40 | 41 | -1 | ||||||||||||
43 | 44 | -1 | ||||||||||||||
46 | 47 | |||||||||||||||
-1 | 49 |
let joseph=new Array(17);
let number=1;
let count=joseph.length; // 统计数组中不是-1的元素的个数
while(count!==1){
for(let i=0;i<joseph.length;i++){
if(joseph[i]!==-1){
if(number%3){
joseph[i]=number;
}else{
joseph[i]=-1;
}
number++;
}
}
console.log(joseph);
// 计算数组中不是-1的元素的个数
/*count=0;
for(let i=0;i<joseph.length;i++){
if(joseph[i]!==-1){
count++;
}
}*/
count=joseph.filter(function(item){
return item!==-1;
}).length;
}
let index=joseph.findIndex(function(item){
return item!==-1;
})
console.log(`最后一个人的位置是:${index}`);