第二次博客作业
1、指针(探索中)、类与对象(试图与Java划清界限);
运用不够熟练,阅读别人代码时容易出错,自己敲代码容易犯语法性错误。对书本中知识点的熟悉程度不够,近期较少认真细读课本。
2、具体解题报告
ACM https://vjudge.net/contest/274108#problem/C (华工新手训练题库--青岛赛签到题)WA10 TL3 CE2 AC1
一个自闭的题目,若暴力解答直接超时,用简易方法规避无效循环会导致错解。
整体代码如下:
#include<cstdio>
#include<algorithm>
using namespace std;
int mp[]={1,0,0,0,1,0,1,0,2,1};
int g(int x)
{
int ans=0;
int t;
if(x==0)return 1;
while(x)
{
t=x%10;
ans+=mp[t];
x/=10;
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
int x,k;
while(T--)
{
scanf("%d%d",&x,&k);
while(k--)
{
x=g(x);
if(x==0)
break;
}
if(k>0)
{
if(k&1)
x=1;
}
printf("%d\n",x);
}
return 0;
}
代码主要分两部分
第一部分是循环语句计算分数并迭代进入下一个函数,这部分较为简单,只要写出提取位数的代码就完事了。
该题的重点是如何判断结束时间位置,如果暴力循环,会导致极限数据下的TL。看表可知,当x==1||x==0的情况下,终值会在1和0之间循环,最终是0还是1的关键在于循环的次数是奇数还是偶数。
用&1判断奇偶性就可解决问题。
该题的思路并不复杂,是属于秒懂思路的类型,但是在解题过程中要观察题目限定时间和自己代码的复杂度,要考虑到如何消除代码中的无用循环是一个解题要点,最后合理使用二进制位运算快速判断解题。
posted on 2018-12-08 12:56 Where_Free 阅读(137) 评论(0) 收藏 举报
浙公网安备 33010602011771号