蓝桥杯备赛第五天

P8680 蓝桥杯备赛第五天

题目分析:对于这个题较好的方法就是找到一种能处理特殊数字的判别方法,然后进行求和即可,我想了好久都没想出来,所以这次就是看着大佬的思路我自己上手测试。

源代码:#include<bits/stdc++.h>

using namespace std;

bool m(int n)

{

while(n)

{

int t=n%10;

if(t==0||t==1||t==2||t==9)

return true;

n=n/10;

}

return false;

}

int main()

{

int n,i,sum=0;

cin>>n;

for(i=1;i<=n;i++)

if(m(i))

sum+=i;

cout<<sum;

return 0;

}

收获:这个题目中对数据的限制没有超过整数的(应用数列求和公式判断最大值),所以没有开long long,通过借助if和while语句的判断,还有bool型函数特殊的输出形式,本题可解。

大佬对于数据的处理也是细思极恐,那个变量t的设置,实现了防止因n提前结束,同时对于要判断的数是i,不是n,总有小笨狗不细心,没错就是我。强烈建议看完之后自己上手来一遍!看会不代表学会。

优化思路:可以试着将四个数存入数组判断int num[10]={2, 0, 1, 9};还可以加入ios::sync_with_stdio(false);(关闭了同步流,加快数据的读取,即写上以上代码后表示不能使用scanf和printf了,不能再用cout<<endl。而应该改用cout<<'\n'endl在关闭后没有自动刷新缓冲区的功能了)对于要求时间限制的题型有很大帮助。

方法二:

for(i=1;i<=n;i++)

{

k=i;

while(k)

{

s=k%10;

if(s==0||s==1||s==2||s==9)

{

sum+=i;

break;

}

k=k/10;

}

}

解析:首先采用for循环控制语句,接着采用while进行判断,进而通过if语句实现求和操作!时间复杂度两者相同

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值