求解立方根
- 计算一个浮点数的立方根,不使用库函数。
- 保留一位小数。
function kaigeng(number, geng) {
let fu = false;
if (number < 0) {
number = -number;
fu = true;
}
let gen = 0;
while(gen**geng <= number) {
gen += 0.001;
}
return fu ? -gen : gen;
}
const number = readline();
console.log(kaigeng(number, 3).toFixed(1));
记负均正II
- 输入 n 个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
- 本题有多组输入数据,输入到文件末尾。
let str;
let arr = [];
while (str = readline()) {
arr.push(Number(str));
}
let arr2 = arr.filter(item => item >= 0);
let arr3 = arr.filter(item => item < 0);
let avg = arr2.length > 0 ? arr2.reduce((t, v) => t + v, 0) / arr2.length : 0;
console.log(arr3.length);
console.log(avg.toFixed(1));
Redraiment的走法
Redraiment是走梅花桩的高手。Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。他希望走的步数最多,你能替Redraiment研究他最多走的步数吗?
while(n = readline()) {
let arr = readline().split(' ').map(Number)
let dp = []
let res = 0
for(let i=0; i<n; i++) {
dp[i] = 1
// 遍历j<i的数据,得到新的dp。新的dp为之前的[dp[max]] + 1
// 例如 [2 5 1 5 4 5 ]
// 5>2 dp[1] = dp[0] + 1 = 2
// 1 不大于2 也不大于5 dp[2] = 1
// 5大于2 大于1 dp[3] = 2
// 4大于2 大于1 dp[4] = 2
// 5大于2 大于1 大于4 dp[5] = 3 == dp[4] + 1
for(let j=0;j<i;j++) {
if(arr[j]<arr[i]){
// 遍历得到最大的dp[j] 然后+1为最新的dp
dp[i] = Math.max(dp[j]+1, dp[i])
}
}
res = Math.max(res, dp[i])
}
console.log(res)
}
自动售货系统
let line
while(line = readline()) {
let arr = line.split(';')
let a = arr.shift()
let goods = a.split(' ')[1].split('-').map(e=>parseInt(e))
let goodsMap = {
A1:{
price:2,count:goods[0],key:'A1'},
A2:{
price:3,count:goods[1],key:'A2'},
A3:{
price:4,count:goods[2],key:'A3'},
A4:{
price:5,count:goods[3],key:'A4'},
A5:{
price:8,count:goods[4],key:'A5'},
A6:{
price:6,count:goods[5],key:'A6'},
}
let money = a.split(' ')[2].split('-').map(e=>parseInt(e))
let yuxia = 0
console.log('S001:Initialization is successful')
for(let i=0;i<arr.length;i++) {
let options = arr[i].split(' ')
let payMoney = (options[1])
if(options[0] === 'p') {
if(payMoney != 1 && payMoney != 2 &&payMoney != 5&&payMoney != 10) {
print('E002:Denomination error')
} else {
// console.log(payMoney,'===',payMoney,'===',money)
if((payMoney == 5 ||payMoney==10) && parseInt(payMoney)>(money[0]*1+money[1]*2)) {
print('E003:Change is not enough, pay fail')
}
else if(goods[0]==0&&goods[1]==0&&goods[2]==0&&goods[3]==0&&goods[4]==0&&goods[5]==0){
print("E005:All the goods sold out")
} else {
yuxia = parseInt(payMoney) + yuxia
if(payMoney==1){
money[0] = money[0] + 1
}
if(payMoney==2){
money[1] = money[1] + 1
}
if(payMoney==5){
money[2] = money[2] + 1
}
if(payMoney==10){
money[3] = money[3] + 1
}
print("S002:Pay success,balance=" + yuxia)
}
}
}
if(options[0] === 'b') {
if(payMoney != 'A1' && payMoney != 'A2' &&payMoney != 'A3'&&payMoney != 'A4'&&payMoney != 'A5'&&payMoney != 'A6') {
print('E006:Goods does not exist')
} else {
if(goodsMap[payMoney].count == 0) {
print('E007:The goods sold out')
} else if(yuxia<goodsMap[payMoney].price){
print('E008:Lack of balance')
} else {
yuxia = yuxia-goodsMap[payMoney].price
print('S003:Buy success,balance='+yuxia)
}
}
}
if(options[0] === 'c') {
if(yuxia == 0) {
print('E009:Work failure')
} else {
let count = yuxia
let num1 = 0
let num2 = 0
let num5 = 0
let num10 = parseInt(count/10)
if (num10>money[3]) {
num10 = money[3]
count = count - money[3]*10
} else {
count = count - num10*10
}
// console.log(num10, '===',count)
if (count > 0) {
num5 = parseInt(count/5)
if (num5>money[2]) {
num5 = money[2]
count = count - money[2]*5
} else {
count = count - num5*5
}
}
// console.log(num5, '===',count)
if (count > 0) {
num2 = parseInt(count/2)
if (num2>money[1]) {
num2 = money[1]
count = count - money[1]*2
} else {
count = count - num2*2
}
}
// console.log(num2, '===',count)
if (count > 0) {
num1 = count
}
yuxia = 0
money[0] = money[0] - num1
money[1] = money[1] - num2
money[2] = money[2] - num5
money[3] = money[3] - num10
print('1 yuan coin number='+num1)
print('2 yuan coin number='+num2)
print('5 yuan coin number='+num5)
print('10 yuan coin number='+num10)
}
}
if(options[0].charAt(0) === 'q') {
if(payMoney != '0' && payMoney != '1') {
print('E010:Parameter error')
} else {
if(payMoney == '0') {
goodsMap.sort((a,b)=>{
if(b.count == a.count ) {
return a.key < b.key
} else {
return b-a
}
})
for(let e in goodsMap) {
print(goodsMap[e].key + ' '+goodsMap[e].price + ' ' +goodsMap[e].count)
}
} else {
print('1 yuan coin number=' + money[0])
print('2 yuan coin number=' + money[1])
print('5 yuan coin number=' + money[2])
print('10 yuan coin number=' + money[3])
}
}
}
}
}
人民币转换
考试题目和要点:
-
中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
-
中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。
-
阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
-
10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
-
十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”
while (line = readline()) {
let number = line.split(".")
let str = {
"0":"零",
"1":"壹",
"2":"贰",
"3":"叁",
"4":"肆",
"5":"伍",
"6":"陆",
"7":"柒",
"8":"捌",
"9":"玖",
}
let [zhengshu,xiaoshu] = number
let out = ""
let temp = ""
for(let i = zhengshu.length-1;i>=0;i--){
temp = zhengshu[i]+temp
if(temp.length == 4 || i==0){
let s = ""
if(zhengshu.length-i>4 && zhengshu.length-i<=8){
s = "万"
}else if(zhengshu.length-i>8 && zhengshu.length-i<=12){
s = "亿"
}
out = get_four(temp) + s + out
temp = ""
}
}
out = out.replace(/^0+/,"")
out = out.replace(/0+$/,"")
out = out.replace(/0+/g,"零")
out = out.replace(/壹拾/g,"拾")
out = out.replace(/零万/g,"万")
out = "人民币" + (out==""?"":out + "元") + get_two(xiaoshu)
console.log(out)
function get_four(num){
let out = ""
num = num.padStart(4,"0")
out = (num[0] == "0"?"0":str[num[0]]+"仟")
+(num[1] == "0"?"0":str[num[1]]+"佰")
+(num[2] == "0"?"0":str[num[2]]+"拾")
+(num[3] == "0"?"0":str[num[3]])
return out
}
function get_two(num){
if(num[0] == "0" && num[1] == "0"){
return "整"
}else{
return (num[0]=="0"?"":str[num[0]]+"角") + (num[1]=="0"?"":str[num[1]]+"分")
}
}
}
记票统计
请实现一个计票统计系统。你会收到很多投票,其中有合法的也有不合法的,请统计每个候选人得票的数量以及不合法的票数。
本题有多组样例输入。
while(s = readline()){
while(isNaN(Number(s))){
s = readline();
}
o = {
};
readline().trim().split(" ").forEach((obj,index)=>{
o[obj]=0});
o['Invalid'] = 0;
readline();
readline().trim().split(" ").forEach((obj,index)=>{
if(o[obj]!=undefined){
o[obj]+=1;
}else{
o['Invalid']++;
}
});
Object.keys(o).forEach((obj,i)=>{
console.log(obj+" : "+o[obj]);
})
}
数组分组
输入int型数组,询问该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),不是5的倍数也不是3的倍数能放在任意一组,可以将数组分为空数组,能满足以上条件,输出true;不满足时输出false。
while(num = readline()){
let nums = readline().trim().split(' ').map(i =>+i);
let fs = 0,ts = 0,rs = 0,rl = [];
for(let n of nums){
if(n % 5 == 0){
fs += n;
}else if(n % 3 == 0){
ts += n;
}else{
rs += n;
rl.push(n);
}
}
let hs = (fs + ts + rs) / 2;
if(Math.floor(hs) != hs){
console.log(false);
}else{
console.log(devide(fs, ts, rl, 0));
}
}
function devide(fs,ts,rl,index){
//递归
if(index == rl.length){
return fs == ts;
}
return devide(fs + rl