比如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)
}
编写函数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
}
将字符串"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)
编写函数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(" ");