p1044韩信点兵

  作为循环语句和判断语句的入门题,相信看我博客的肯定都会。

#include<iostream>
using namespace std;
int a,b,c,i;
int main()
{
    cin>>a>>b>>c;
    for(i=7+c;i<=100;i=i+7)
    {
        if((i%3==a)&&(i%5==b)&&(i>=10)&&(i<=100))
        {
            cout<<i<<endl;
            return 0;
        }
    }
    cout<<"No answer"<<endl;
return 0;
}
根本没必要贴出来的好吧

  然后就是直接算答案的强方法了。

  ans需要满足三个条件%3==a、%5==b,%7==c;

  那能不能构造出三个数,分别满足一个其中条件并且是另外两个数的公倍数?

  比如满足第一个条件的数要求为5和7的倍数,也就是35的倍数。还要%3==a,现在35%3已经等于2了,难道要35*a/2?(我知道a只可能等1 2)不如往后找一找,说不定有%3=1的好数。然后70就是了,很棒。那第一个数就是70*a了。

  然后由于21%5==1,15%7==1,刚好。那么最后答案就是(70*a+21*b+15*c)%105。

  本题中要求10到100之间的,加个判断就行。

#include<iostream>
using namespace std;
int a,b,c,ans;
int main()
{
    cin>>a>>b>>c;
    ans=(70*a+21*b+15*c)%105;
    if(ans>=10&&ans<=100) cout<<ans;
    else cout<<"No answer"<<endl;
return 0;
}
( ̄▽ ̄)/

猜你喜欢

转载自www.cnblogs.com/qywyt/p/9019190.html