我正在尝试解决这个黑客排名问题。
每个学生都会收到包含以下范围内的成绩: 0-100 至 .
任何低于 38 的成绩均为不及格。 Sam 是大学教授,喜欢根据以下规则对每个学生进行四舍五入:
如果 grade 与下一个倍数之间存在差异 5 小于 3,向上舍入为 5 的下一个倍数。如果grade的值小于38,则不会发生舍入,因为 结果仍然是不及格。
给定 Sam 的每个学生的初始值,编写代码 自动化舍入过程。
我的代码是:
function gradingStudents(grades) {
const roundup = y => y + 1;
{
if ( grades < 38 || grades % 5 === 0) return grades;
else if ( grades % 5 < 4 && grades % 5 !== 0) return roundup(grades);
}
{
if (roundup % 5 === 0) return roundup;
else { gradingStudents(roundup + 1) }
}
}
gradingStudents(38) // -> 39
我尝试在变量
roundup中使用
Math.ceil(grades)
,但输出没有改变。因此,当您使用不早于 5 的倍数(例如 43)的数字调用该函数时,它会返回前面的数字。但是,如果它是 5 的倍数之前的数字,则会出现范围错误。 “已达到最大调用堆栈大小。”
据我所知,代码不会继续到第二部分。即使确实如此,我也不确定在处理第二个块中的 if 语句时是否会获取函数 roundup 的当前值。
我不能进入这里做什么?
另外,这实际上是用于数组输出,但由于我是初学者,所以我对这个开始也非常满意:D 。
Javascript解决方案:
function gradingStudents(grades) {
return grades.map((grade) => {
if (grade > 37) {
const offset = 5 - (grade % 5);
if (offset < 3) {
grade += offset;
}
}
return grade;
});
}
试试这个:
function gradingStudents(grades) { //input: 43
var finalGrade;
if(grade < 38)
return grades;
else{
var gradeDif = grades % 5; //3
if(gradeDif > 3){
return grades;
}
else {
return grades + (5 - gradeDif); //Output: 45
}
}
}
一种解决方案计算不大于成绩的下一个
5
倍数,并使用该值来测试是否向上舍入 (next5 - grade < 3
)。
我们编写一个简单的函数来对单个成绩进行四舍五入,然后对于成绩列表,使用
.map
与该函数。
const roundGrade = (grade) => {
const next5 = 5 * Math.ceil (grade / 5)
return (grade < 38) ? grade : (next5 - grade < 3) ? next5 : grade
}
const gradingStudents = (grades) =>
grades .map (roundGrade)
console .log (gradingStudents ([73, 67, 38, 33]))
请注意,与此问题的大多数解决方案一样,不需要递归。
1-根据问题逻辑使用
Array.prototypt.map
。
const gradingStudents = (grades) => grades
.map(n => (n >= 38 && n % 5 >= 3)?(n + ( 5 - ( n % 5 ) )):n )
let result = gradingStudents([0,25,38,56,89,77,78,57,58])
console.log(result)
我的解决方案是这样的
function gradingStudents(grades) {
grades.map((grade,i)=>{
if(grade >= 38){
let fg = (grade/5).toString().split('.');
if(fg[1]>5){
grades[i]=((parseInt(fg[0],10)+1) * 5);
};
}
});
return grades;
}
console.log(gradingStudents([73,67,38,33]));
我的解决方案:
function gradingStudents(grades) {
return grades.map(function(grade) {
return (grade >= 38 && grade % 5 >= 3) ? grade + 5 - (grade % 5) : grade;
});
}
用Python做的,我会接受它是非常基本的,
def gradingStudents(grades):
for i in range(len(grades)):
n=grades[i] % 5
if (5-n<3):
if((grades[i]+(5-n)>=40)):
grades[i]=grades[i]+(5-n)
return grades