我敲敲敲
简答看一下
传送门不见了。。。
题目描述
给出两个正整数N、M,求一个最小的正整数a,使得a和(M−a)都是N的因子(包括负因子)。
输入
包括两个整数N、M。N不超过1,000,000。
输出
输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出−1。
输入样例 1
35 10
输出样例 1
5
分析
是一道普通枚举题👀
先把所有的可能枚举出来
#include <iostream>
using namespace std;
int main() {
int n , m;
cin >> n >> m;
for (int a = 1; a <= n; a++)
{
if (n % a == 0 && n % (m - a) == 0)
{
cout << a ;
return 0;
}
}
cout << -1 ;
return 0;
}
但当你提交上去后,会发现。。。
四个运行时错误!!!
那么,为什么会出现运行时错误呢?
是的,除数不能为0,否则会报错
加上一个特判就好了!上代码
#include<iostream>
using namespace std;
int main()
{
int a,m,n,flag=0;
cin>>n>>m;
for(a=1;a<=n;a++)
{
if(m-a==0) break;
if(n%a==0 && n%(m-a)==0)
{
cout<<a<<endl;
flag=1;
break;
}
}
if(flag==0) cout<<"-1"<<endl;
}
嗯???答案错误
哦吼,写完这个你会发现出来了一个答案错误。。。
不过仔细找找,会发现有一个地方貌似有点问题?(第8行)
如果为0要继续去找!而不是直接跳出循环输出-1!
此处应有continue
AC代码
#include<iostream>
using namespace std;
int main()
{
int a,m,n,flag=0;
cin>>n>>m;
for(a=1;a<=n;a++)
{
if(m-a==0) continue;
if(n%a==0 && n%(m-a)==0)
{
cout<<a<<endl;
flag=1;
break;
}
}
if(flag==0) cout<<"-1"<<endl;
}
完结撒花~~