数组与字符串之间的灵活运用的十题

编写函数repeat(char,n) 实现重复char字符串n次

比如repeat(“★”,6) 返回"★★★★★★"

function rev(char,n){
    var arr=""
     for(var i=0;i<n;i++){
      arr=arr.concat(char)
     }//效率很低
     console.log(arr)
   }

//方法二
二分法,我们已经有了★★,出现4个五角星,就把★★翻倍就行了。
所以就是把任何数字都要1、2、4、8、16、32……组成的。二进制的事儿。
二进制,只有0、1两个数字,位权的概念:
110101
1个1 + 0个2 + 1个4 + 0个8 + 1个16 = 21

那么反过来,我们十进制34等于二进制多少呢?32 + 2
1100010
再比如15等于多少? 8+4+2+1
11111

//二分法
 function repeat(char,n){
      var arr=""
      for(var i=0;i<n;i++){
        while(true){
        if(n%2==1){
          arr+=char
        }
        if(n==1){
          break
        }
        n=parseInt(n/2)
        char=char+char
      }
      }
      return arr
    }

第2题
在控制台输出图形

   		 *
  		 ***
		  *****
		 *******
		*********
 function repeat(char,n){
      var arr=""
      for(var i=0;i<n;i++){
        while(true){
        if(n%2==1){
          arr+=char
        }
        if(n==1){
          break
        }
        n=parseInt(n/2)
        char=char+char
      }
      }
      return arr
    }
    var a,b,str
    for(var i=1;i<6;i++){
      a= repeat("*",i*2-1)
      b=repeat(" ",5-i)
      str= b+a
      console.log(str)
    }

第3题

编写函数rev(char) 实现将字符串char倒置
比如rev(“spring”) 返回"gnirps"

 function rev(char){
      
      var arr=char.split("")
    arr.reverse()
    arr.join()
    console.log(arr)
    }


function rev(char,n){
    var str=""
    for(var i=char.length-1;i<0;i--){
      str+=char.charAt[i]
      char=str
    }
    return str
  }

第4题

将字符串"i come from beijing"倒置,即控制台输出"beijing from come i"
语句直接写在程序中,不需要用户输入

  var str="i come from beijing"
      console.log(typeof(str))
     var arr= str.split(" ");
      console.log(arr)
      arr1=arr.reverse()
      console.log(arr1)
      str1=arr1.join(" ")

      console.log(str1)

第5题

编写函数rightchange(char,n) 实现字符串char循环右移n位。
比如rightchange(“abcdefg”,2) 返回"fgabcde"

function rightchange(char,n){
        var str = char;
        var arr=""
        for(var i=0;i<n;i++){
          arr=str.slice(-1)+str.slice(0,str.length-1)
          str=arr;
        }
        console.log(arr)
      }


 function rightchange(char,n){
        var arr = char.split("");
        
        for(var i=0;i<n;i++){
        arr.unshift(arr.pop())
        }
//         console.log(arr)
        return arr.join()
      }



 function rightchange(char,n){
n=n%char.length;
        if(n==0) return char

      var arr= char.substr(-n)+char.substr(0,char.length-n)
       return arr
      }

第6题
编写函数maxr(char) 返回字符串char中最长的连续重复字母
比如maxr(“mmmiijjjjkkkkkkssptr”) 返回"kkkkkk"

var a=0
          var b=0
          var maxLength=0;
          var maxletter=""
          function maxr(char){
            while(a!=char.length-1){
              if(char.charAt(a)==char.charAt(b)){
                b++;
                console.log(b)
              }else{ 
                if(b-a>maxLength){
                  maxLength=b-a;
                  console.log(maxLength)
                  maxletter=char.charAt(a)
                }
                a++;
                // console.log(a)
                b=a+1
              }
            }
            console.log(maxletter)
          }

第7题
有10个学生的成绩存在数组中,请统计大于等于平均成绩的人数。
成绩直接以数组形式写在程序中,不需要用户输入。

var sum=0;
      for(var i=0;i<10;i++){
        var arr=[34,56,23,24,56,67,8,54,54,45]
       sum+=arr[i]
      }
      var average=sum/10
      console.log(average)
      for(var i=0;i<10;i++){
        var arr=[34,56,23,24,56,67,8,54,54,45]
        if(average<=arr[i]){
          console.log(arr[i])
        }
      }

第8题
有10个学生的成绩存在数组中,请统计最高分,最低分,并将最高分和最低分学生的下标输出到控制台

 for(var i=0;i<10;i++){
        var arr=[34,56,23,24,56,67,8,54,54,45]
        arr.sort(function(a,b){
          if(a>b){
            return 1
          }else if(a<b){
            return -1
          }else if(a==b){
            return 0
          }
        })
      }
      console.log(arr[0],arr[9])

var arr=[34,56,23,24,56,67,8,54,54,45]
          var max=0;
          var min=arr[0];
          var maxIndex=0;
          var minIndex=0;
          for(var i=0;i<arr.length;i++){
            if(arr[i]>max){
              max=arr[i]
              maxIndex=i
            }else if(min>arr[i]){
              min=arr[i]
              minIndex=i
            }
          }
          console.log(max,min)
          console.log(maxIndex,minIndex)

第9题
勾股定理:直角三角形中,两个直角边的平方和,等于斜边平方和。寻找三边的长度都不大于100,并且三边边长都是整数的可能,在控制台输出。

//穷举法
for(var x=1;x<100;x++){
            for(var y=1;y<100;y++){
              for(var z=1;z<100;z++){
                if(x*x+y*y==z*z){
                  console.log(x,y,z)
                }
              }
            }
          }

//设A验B法

第10题 这题非常难,别跳楼
编写函数maxsame(char1,char2) 返回字符串char1和char2的最大相同子串
比如maxsame(“abcdefghijklmn”,“mndefghlm”) 返回"defgh"

	/*方法1:思路就是把str2的所有子串都遍历,然后看看是否是str1的一部分
		如果是就比较长度,把长度最大的返回。这里仰赖js提供的一个indexOf()可以
		快速检测一个字符串是不是另一个字符串的一部分。*/
		function check(str1,str2){
			var s;

			var maxlength = 0;	//最大子串的长度
			var maxchar = "";	//存放最大子串

			//遍历str2的所有子字符串
			for(var start = 0 ; start <= str2.length ; start++){
				for(var end = start + 1; end <= str2.length; end++){
					//变量s就是当前遍历的子字符串
					s = str2.substring(start,end);
					//就要看s是不是在str1中
					if(str1.indexOf(s) != -1 && s.length > maxlength){
						//在源字符串中有,所以当前的最大子串长度就是s的长度
						maxlength = s.length;
						//当前的最大子串就是你遍历这个
						maxchar = s;
					}
				}
			}
			return maxchar;
		}
//方法2:是更经典的4指针法,为什么经典,因为就js中有indexOf函数。
		//c语言中,没有indexOf这个东西,我们不能立即判断一个字符串是不是另一个字符串的子函数
		//c语言中,就有一个经典的4指针法。
	function check(str1,str2){
			//四个指针
			var a = 0;
			var b = 1;
			var c = 0; 
			var d = 1;

			var maxlength = 0;
			var maxchar = "";
			
			while(true){
				if(str1.charAt(a) != str2.charAt(c)){
					//如果a、c指针不一样,那么c、d右移
					c++;
					d++;
				}else{
					//a、c一样
					while(true){
						if(str1.charAt(b) == str2.charAt(d)){
							b++;
							d++;
							if(b - a > maxlength){
								maxlength = b - a;
								maxchar = str1.substring(a,b);
							}
						}else{
							c = 0;
							d = 1;
							a++;
							b = a + 1;
							break;
						}
						//验收
						if(b >= str1.length || d >= str2.length){
							//如果c、d到头了,那么c、d归位,a右移
							break;
						}
					}
				}

				//验收,c、d发生了增长,防止cd超标
				if(c >= str2.length || d >= str2.length){
					//如果c、d到头了,那么c、d归位,a右移
					c = 0;
					d = 1;
					a++;
					b = a + 1;
				}

				//验收
				if(a >= str1.length){
					break;
				}
			}

			return maxchar;
		}

第11题
将"i love javascript cai guai"的每个单词的第一个字母,变为大写。

答案:

var arr = "i love javascript cai guai".split(" ");
for(var i = 0 ; i < arr.length ; i++){
    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1);
}
arr.join(" ");

你可能感兴趣的:(js)