解题思路:题目给出两个数字(假设为x和y),要求找到最大的不能用这两个数表示的数字(假设为n)。首先能确定x*y是一定能由x,y表示的
那么大于x*y的数字也一定可以由x,y组成。因此循环可以从x*y开始,逐渐递减,找到第一个不满足条件的数字即为答案。判断条件分为两个(下列p为倍数),第一个while循环找到x*p<i的最大p,如果n减去整数倍的x对y取余都不为0,说明该数不能由x,y组成,就是我们要的答案。
注意事项:
跳出while循环时需要判断一下是因为能由x,y组成还是因为x*p>i(或者y*p>i,其实都一样),如果是后者情况,p记得要减一。for循环第一句一定要初始化a和倍数p,否则会出错。
参考代码:
#include<stdio.h>
using namespace std;
int main()
{
int x,y,p,n,a;
int i,max;
a=0;
p=0;
scanf("%d%d",&x,&y);
n=x*y;
for(i=n;i>=1;i--)
{
a=0; p=0;
while((i-x*p)%y!=0 && x*p<i)
p++;
if(x*p>i)
p--;
if((i-x*p)%y!=0)
a=1;
if(a==1)
{
max=i;
break;
}
}
printf("%d",max);
return 0;
}
0.0分
2 人评分