按每天工资等于连续发放天数的分段规则,逐段累加金币。
OJ: noi_openjudge
题目 ID: ch0105-45
难度:入门
标签:模拟循环数学python
日期: 2026-07-30 23:01
题意
第
思路
变量 salary 同时表示本阶段每天的金币数和本阶段长度。当前剩余天数可能不足一个完整阶段,因此本阶段实际发放天数为 min(days, salary)。
加入 salary * paid_days 后扣除已处理天数,并进入下一阶段。
代码
Python代码
python
days = int(input())
total = 0
salary = 1
while days > 0:
paid_days = min(days, salary)
total += salary * paid_days
days -= paid_days
salary += 1
print(total)C++代码
cpp
/*
*
* 1
* 2 3
* 4 5 6
* 7 8 9 10
* 11 12 13 14 15
* */
#include <cstdio>
int main(){
int sum = 0;
int n;
scanf("%d",&n);
int i,j,idx=0;
for (i=1;1;i++){
for(j=1;j<=i;j++){
sum += i;
idx++;
if( idx == n){
printf("%d\n",sum);
return 0;
}
}
}
return 0;
}复杂度
处理到第
总结
按规则天然分段的模拟题,直接处理整段比逐天累加更容易表达边界。