今天看了一个赛码上的编程题,做了半天。
//https://exercise.acmcoder.com/online/online_judge_ques?ques_id=1664&konwledgeId=134
function cal(n) {
if (n < 1 || n > 1000 * 10000 * 100) return; //不符合的数据
var res = 1; //初始第一天为1的价值
var count = 1; //计数
var r = -2;
var temp = 0; //累加的值
if (n == 1) { //如果是第一天,返回1
return 1;
}
do {
temp = temp + count + 1;
count += 1;
} while (temp < n)
for (var i = 1; i < count; i++) {
r += 2;
} //算出目标天数与目标价值的关系
res = n - r; //求出价值结果
return res;
}
print(cal(readInt()))
思路:根据列子找规律
也看了其他分享,简洁速度快,变量易读;
//答3
// 提交时间 :2017-09-15 14:10:29 用时 :12 ms
// 占用内存 :5160 kb 代码长度 :132
(function getprice(n) {
var day = 2,
spacing = 2,
i = 0;
while (day < n) {
i += 2;
spacing++;
day += spacing;
}
print(n - i);
})(read_line())