1.通过循环按行顺序为一个5*5的二维数组a,赋到1到25的自然数试编程
//方法一:
var arr = [];
var num = 1;
for(var i = 0 ; i < 5 ; i++){
//在数组arr里面添加成二维数组
arr.push([]);
//在二维数组里面添加数据1-25;
for(k = 0 ; k < 5 ; k++){
arr[i].push(num);
num++;
}
}
console.log(arr);
//方法二:
var a = new Array();
var count = 0;
for(var i = 0 ; i < 5 ; i++){
a[i] = new Array();
for(k = 0 ; k < 5 ; k++){
count++;
a[i].push(count);
}
}
console.log(a);
2.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中。试编程。
//方法一:
var evenArr = [];
var arr = [];
var meanValue = [];
for(var i = 2 ; i <= 60 ; i += 2){
evenArr.push(i);
}
//每5个放在一个数组里面
for(var i = 0 ; i < 6 ; i++){
//截取5个放在arr里面
arr.push(evenArr.splice(0,5)); //截取的结果放在新的数组中(易错点:slice是按照下标进行截取)
}
//arr二维数组,里面的每一项都为一个数组,把小数组里面的数值相加除5。然后push到meanValue这个平均值的数组中(meanValue.push()
for(var i = 0 ; i < arr.length ; i++){
var sum = 0;
for(var k = 0 ; k < arr[i].length ; k++){
sum += arr[i][k];
}
//每次sum和 计算完毕之后,把平均值push到meanVulue(每一个小组求一次和及平均,所以需要让sum每一次清0)
meanValue.push(sum / 5);
}
console.log(meanValue);
//方法二:
var arr = [];
var arr1 = [];
var sum = 0;
for(var i = 0 ; i < 30 ; i++){
arr.push(2 * i + 2); //下标和值之间的关系
sum += arr[i];
if(arr.length % 5 == 0){
arr1.push(sum / 5);
sum = 0;
}
}
console.log(arr,sum,arr1);
3.通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角的和。试编程。
//方法一:
var arr = [];
var num = 1;
var sum = 0;
for(var i = 0 ; i < 5 ; i++){
//在数组arr里面添加成二维数组
arr.push([]);
//在二维数组里面添加数据1-25;
for(k = 0 ; k < 5 ; k++){
arr[i].push(num);
num++;
}
}
//计算左下半三角的和(首先要取出数据)
for(var i = 0 ; i < arr.length ; i++){
//取出二维数组的值
for(var k = 0 ; k <= i ; k++){
sum += arr[i][k];
}
}
console.log(sum);
//方法二:
var a = new Array();
var count = 0;
var sum = 0;
for(var i = 0 ; i < 5 ; i++){
a[i] = new Array();
for(var k = 0 ; k < 5 ; k++){
count++;
a[i].push(count);
}
for(var j = 0 ; j <= i ; j++){
sum += a[i][j];
}
}
console.log(a,sum);
4.编写函数norepeat(arr) 将数组的重复元素去掉
//splice(start,deleteCount,arr) 从start开始,删除几个,arr新插入的数组元素。 改变原数组
var arr = [0,1,2,3,3,3,5,6,3,7,8,7,77,7,7,3,4,3];
function norepeat(arr){
//运用选择排序的思想
for(var i = 0 ; i < arr.length - 1; i++){
//用第一个和其余的比较
for(var j = i + 1 ; j < arr.length ; j++){
//如果两个相等,删除
if(arr[i] == arr[j]){
arr.splice(j,1);
j--; //跳过了j这个索引,所以j--
}
}
}
return arr;
}
console.log(norepeat(arr));
5.封装功能“有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中”
//方法一:
//假设已经排好顺序,然后添加数字
var arr = [1,2,3,5,7,9];
function insert(arr,num){
//制作一个口令
var flag = true;
//利用循环,每个数组都和num比较,如果小于arr[i] arr.splice(i,0,num);
for(i = 0 ; i < arr.length ; i++){
if(num <= arr[i]){
arr.splice(num);
flag = false;
break;
}
}
if(flag){
arr.push(num);
}
return arr;
}
console.log(insert(arr,20));
//方法二:
var arr = [2, 3, 4, 6, 2, 0, 4, 3];
//冒泡排序
function bubbleSort(arr, num) {
//确定循环的轮数
for (var i = 0; i < arr.length - 1; i++) {
//每一轮 数值的比较(两两比较的,每一轮最后一个都不用比较,所以-i;得到的最后一个和空的undefined比较了,所以-1,不用比较,提高算法的效率)
for (var k = 0; k < arr.length - i - 1; k++) {
//谁大谁往后排
if (arr[k] > arr[k + 1]) {
var temp = arr[k];
arr[k] = arr[k + 1];
arr[k + 1] = temp;
}
}
}
//插入数据
for (var j = 0; j < arr.length; j++) {
if (num <= arr[j]) {
arr.splice(j, 0, num);
return arr;
} else if (num > arr[arr.length - 1]) { //当这个数字大于排序后的最后一个数字时(即最大数),将该数加在数组的后面
arr.push(num);
return arr;
}
}
// if(num >= arr[arr.length-1]){
// arr.push(num);
// return arr;
// }
}
console.log(bubbleSort(arr, 4));