解题思路:
注意事项:
参考代码:
#include<iostream>
#include<algorithm>
using namespace std;
int check(int n,int c,int d)
{
while(n>0) //不能写成 while(n)(当n<0时也会成立)
{
if(n%c==0||n%d==0)
return 1;
if((n-c)%d==0||(n-d)%c==0)
return 1;
n-=c+d;
}
return 0;
}
int main()
{
int a,b;
while(cin>>a>>b)
{
int c=min(a,b);
int d=max(a,b);
int ok=0,ans=0;
for(int i=d;;i++) //虽然c和d之间的数目也有买不到的数目,但却不是最大的,故不用考虑
{
if(ok==c)
break;
// ok表示可以连续买到的数目,c表示两包糖中较少的那包的糖的数目
// 如果连续 c个糖果数可以买到,那么之后的所有糖果数都可以买到
// 假设从糖果数i可以买到,且连续 c 个糖果数都可以买到,即i,i+1,i+2,i+3,...,i+c-1,都可以买到
// 那么糖果数为 i+c 就可以用 糖果数i 加上c 组合成,以此类推,i+c+1=(i+1)+c,...
// 因此从糖果数 i及以后的数目都可以买到,故 i-1 买不到的最大数目
// 当然这里是有公式的:a,b为两个质数,则不能用a,b表示的最大的数为: a*b-(a+b)
if(check(i,c,d))
{
if(ok==0)
{
ans=i;
}
ok++;
}
else
{
ok=0;
}
}
cout<<ans-1<<endl;
}
return 0;
}
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:609 |
数组输出 (C语言代码)错误???浏览:602 |
A+B for Input-Output Practice (III) (C语言代码)浏览:592 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:942 |
众数问题 (C语言代码)浏览:911 |
C语言考试练习题_保留字母 (C语言代码)浏览:743 |
C语言程序设计教程(第三版)课后习题9.2 (C语言代码)浏览:573 |
C语言训练-自由落体问题 (C语言代码)浏览:650 |
母牛的故事 (C语言代码)浏览:594 |
a+b浏览:452 |