题解 | #[NOIP2015]金币#
[NOIP2015]金币
https://www.nowcoder.com/practice/8f71f5670e6a45118d24d13868a2da9e
#include <stdio.h> long facSum(long t){ //计算阶乘和,用来计算是第几波,比如第六天就是3!,主函数里用m来记录第三波 long sum=0; for(long i=1;i<=t;i++) sum+=i; return sum; } int main() { long k,sum=0; scanf("%ld",&k); long m=1; //用来记录到第几波 while(1){ if(k>=facSum(m)&&k<facSum(m+1)) break; m++; } for(long i=1;i<=m;i++) //只用遍历从1到波数即可,比如k=6时,就是第三波,就1+2*2+3*3 { sum+=i*i; } printf("%ld",sum+(k-facSum(m))*(m+1)); //结果再加上(剩下的天数*第m+1波),比如k=8,最后要加上(8-3!)*(3+1) return 0; }