题解 P1664 【每日打卡心情好】
天哪,我居然一次过了
这道题嘛,只要就是理解以下的就行啦
1天:奖励1(千里之行,始于足下)
3天:奖励2(坚持3天了,加油!)
7天:奖励3(曜日轮回)
30天:奖励4(月圆月缺,习惯养成)
120天:奖励5(坚持四个月了!)
365天:奖励6(一年四季都坚持下来了!真不容易!)
这些,可以用以下代码表达
int huode(int a){
if(a<3) return 1;
if(a<7) return 2;
if(a<30) return 3;
if(a<120) return 4;
if(a<365) return 5;
if(a>=365) return 6;
}
of course 你看到了一个自定义函数 废话
然后分开讨论
输入的是“1”就这样:
if(da==1){
if(!flag){
flag=!flag;
lian-=pow(2,jian-1);
jian=0;//jian是去火星不能签到的天数
}
if(lian<0){
lian=0;//lian是连续的天数//防止太作死,连续天数爆了
}
lian++;//连续天数增加
huo+=huode(lian);//huo就是活跃值
你可能要问我,“嘿,你没告诉我flag是什么啊”。没事,你看了后面的就懂了
输入的是“2”就这样:
flag=false;
jian++;
还没看懂?那你可能没救了 那给你看全部
AC代码来袭~~~
#include<bits/stdc++.h>//万能头多好用
using namespace std;
int huode(int a){//自定义函数
if(a<3) return 1;
if(a<7) return 2;
if(a<30) return 3;
if(a<120) return 4;
if(a<365) return 5;
if(a>=365) return 6;
}
int main(){
int n;//个数
cin>>n;
int huo=0,lian=0,da,jian=0;
bool flag=true;//这是一个疑问
for(int i=1;i<=n;i++){
cin>>da;//录入
if(da==1){//判断
if(!flag){
flag=!flag;
lian-=pow(2,jian-1);
jian=0;
}
if(lian<0){
lian=0;
}
lian++;
huo+=huode(lian);
}else{
flag=false;
jian++;
}
}
cout<<huo;
return 0;//完美
}
好,那么请问:flag是有什么用呢??
聊天区见哦~~
bye
这人真坏