这是一道水题,但是用什么方法枚举最方便,代码最简洁是一个
值得讨论的问题。
题目描述:
知识点:
首先做这道题不得不使用 abs函数 :
定义函数:int abs(int j);
函数说明:abs()用来计算参数j的绝对值,然后将结果返回。
返回值:返回参数j的绝对值结果。-------------------------------------------------------------------------------------------------------------------------
代码实现(语言:C++):
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; //输入n cout<<abs(n); //输出n的绝对值 return 0; }
-------------------------------------------------------------------------------------------------------------------------
输入#1:4
输出#1:4
-------------------------------------------------------------------------------------------------------------------------
输入#2:-3
输出#2:3
方法一:这道题很容易想到的方法是以string类型读入,然后枚举其中每段连续的三位。(毕竟题目里说的也是string)
注意,若枚举三者中的第一位,枚举的下标应该是,谨防越界!
否则RE会得分!
-------------------------------------------------------------------------------------------------------------------------
AC代码(语言:C++):
#include<bits/stdc++.h> using namespace std; void solve(){ string s; cin>>s; int minn=1e9; for(int i=0;i<=(int)s.size()-3;i++){ int now=int(s[i]-'0')*100+int(s[i+1]-'0')*10+int(s[i+2]-'0'); minn=min(minn,abs(now-753)); } cout<<minn; } int main(){ int tc=1; //cin>>tc; while(tc--){ solve(); } return 0; }
方法二:题目里说的s是字符串,难道在程序里也一定要是字符串吗?当然不是。
那么我们就可以跳出字符串的思维,用 long long 输入数据。枚举是就不断用 %1000 求末三位,然后 /10 即可。
注意:不开 long long 见祖宗!
-------------------------------------------------------------------------------------------------------------------------
AC代码(语言:C++):
#include<bits/stdc++.h> using namespace std; void solve(){ long long s; cin>>s; long long minn=1e9; while(s!=0){ minn=min(minn,abs(s%1000-753)); s/=10; } cout<<minn; } int main(){ int tc=1; //cin>>tc; while(tc--){ solve(); } return 0; }