kkkLUOGI @ 2024-05-03 19:06:29
怎么写啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!(心态已崩)
by juruolaidayang_AKIOI @ 2024-05-03 19:11:56
这是我的,你拿去看吧
#include<iostream>
using namespace std;
int main(){
int n,a=1,c=0,b=0;
cin>>n;
for(int i=1;i<=n;i++){
c+=a;
b++;
if(b==a){
b=0;
a++;
}
}
cout<<c;
return 0;
}
by wandou_pea @ 2024-05-22 22:17:45
其实看题解就好了,但我也稍微和你讲一下:
用两个变量来做,a是目前这个范围内过了多少天,b是这个范围的边界。怎么说可能有点难理解,我们来模拟一下:
第一天,骑士获得1枚金币
第二天,骑士获得2枚金币
第三天,骑士获得2枚金币
第四天,骑士获得3枚金币
第五天,骑士获得3枚金币
第六天,骑士获得3枚金币
也就是说,在第一个区间(第一天)里,金币获得数量是1,在第二个区间(第二天到第三天)里,金币获得数量是2,在第三个区间(第四天到第六天)里,金币获得数量是3。
也就是说第一个区间内,b(也就是区间长度)为1(只有第一天)。第二个区间内,b(也就是区间长度)为2(有第二天和第三天)。
只要骑士每次获得金币,当前区间的获得金币天数就会+1(也就是a+=1)。当他获得金币次数已经达到边界天数上限时,天数上限就会变成b+1,然后当前区间天数(也就是a)变为0
有趣的是,骑士每天获得的金币数,就是b(也就是区间长度)
自己写一下属于自己的代码会让你遇到此类题目时有更好的思路,祝你早日成为cpp大犇!
如有错误,欢迎改正qwq
by kkkLUOGI @ 2024-07-15 12:41:40
@laixiaoyang 谢谢
by kkkLUOGI @ 2024-07-15 12:42:55
@wandou_pea Thanks谢谢
by lrq666_ @ 2024-07-29 15:05:20
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
int sum=0;
int c=1;
for(int i=1;i<=a;i++){
a=a-i;
sum+=c*c;
c++;
}
cout<<sum+a*c;
return 0;
}
参考我的
by Andy_hpy @ 2024-08-09 11:05:58
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005];
ll f1(ll n,ll s){
if(n<s)return n*s;
if(a[n]!=0)return a[n];
a[n]=s*s+f1(n-s,s+1);
return a[n];
}
ll f(ll n){return f1(n,1);}
int main(){
ll n;
cin>>n;
cout<<f(n);
return 0;
}
by lizongrui123 @ 2024-08-18 13:40:25
using namespace std; int main(){ int a,b=0,c=1,i; cin>>a; for(i=1;i<=a;i++){ a-=i; b+=c*c; c++; }
cout<<b+a*c;
}
c++
by wandou_pea @ 2024-08-19 11:19:59
@kkkLUOGI 不用谢
by kkkLUOGI @ 2024-08-27 11:59:15
谢谢各位