算法小练习

题目描述

1、输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

解题思路:将正整数转换为二进制字符串,再遍历字符串统计其中1的个数

总结:js里的toString(radix),toString()方法可把一个 Number 对象转换为一个字符串,并返回数字的字符串。若省略该参数,则使用基数 10。

parseInt(string, radix)

其中,string为必需。要被解析的字符串。radix为可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则parseInt() 将返回 NaN。

parseInt(num,8);   //八进制转十进制
parseInt(num,16);   //十六进制转十进制
parseInt(num).toString(8)  //十进制转八进制
parseInt(num).toString(16)   //十进制转十六进制
parseInt(num,2).toString(8)   //二进制转八进制
parseInt(num,2).toString(16)  //二进制转十六进制
parseInt(num,8).toString(2)   //八进制转二进制
parseInt(num,8).toString(16)  //八进制转十六进制
parseInt(num,16).toString(2)  //十六进制转二进制
parseInt(num,16).toString(8)  //十六进制转八进制

var s=readline()
var s1=parseInt(s).toString(2)
var count=0
for(var i=0;i<s1.length;i++){
    if(s1[i]=="1"){
        count++
    }
}
print (count)

题目描述

给定n个字符串,请对n个字符串按照字典序排列。

var n=readline()
var a=[]
while(n--){
    var s=readline()
    a.push(s)
}
a.sort()
for(let index in a){
    print(a[index])
}

题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

解题思路:先将字符串分割放到一个数组,再反向遍历数组取出

var s=readline()
var a=s.split(" ")
var s1=''
for(var i=a.length-1;i>=0;i--){
   s1+= a[i]+' '
}
print (s1)

题目描述

写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

var s=readline()
var a=''
for(var i=s.length-1;i>=0;i--){
    a+=s[i]
}
print(a)

题目描述

编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。

解题思路:定义个obj用于存放字符的情况,其中,key是字符的值,value是可以是字符的个数(如果要统计每个字符的个数的话),也可以是true(表示这个字符存在)。遍历每一个字符,判断当前obj里是否存在这个属性,如果不存在,则把这个字符以属性的方式添加到obj,同时记录不同字符的变量要加一。

var s=readline()
var obj={}
var n=s.length
var count=0
for(var i=0;i<n;i++){
    if(obj[s[i]]){
        obj[s[i]]++
    }else{
        obj[s[i]]=1
        count++
    }
}
print(count)

题目描述

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

总结:在做这类看数字重复的题,我都是用一个对象通过key(数组的值)和value(有或统计出现的次数)。其中obj[s[i]]代码不会报错,而obj.s[i]代码编译报错。原因是:1、中括号法可以用变量作为属性名,而点方法不可以;2、中括号法可以用数字作为属性名,而点语法不可以;3、中括号法可以使用js的关键字和保留字作为属性名,而点语法不可以(尽量避免在变量或者属性中使用关键字或保留字);

var s =readline()
var n=s.length
var obj={}
var a=''
for(var i=n-1;i>=0;i--){
    if(!obj[s[i]]){
        
          obj[s[i]]=1
         a+=s[i]
    }

}

    print(a)

题目描述

数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出

解题思路:对每次输入的字符串进行分割,index 0是它的索引,index  1是它的值。遍历字符串,判断索引是否已经在obj里了,如果是则要将obj里该索引对应的值更新,如果不在obj里,则将该索引加到obj里,对应的值是它的值。

总结:obj 的value是一个字符串,需转换为整型后做运算

var n=readline()
var a=[]
var obj={}
while(n--){
    s=readline()
    a=s.split(" ")
  
        if(obj[a[0]]){
            obj[a[0]]=parseInt(obj[a[0]])+parseInt(a[1])
        }else{
              obj[a[0]]=a[1]
        }
    
   
}
for(var key in obj){
    print(key,obj[key])
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值