1. 程式人生 > >p1044韓信點兵

p1044韓信點兵

open nbsp lose isp display div std AS space

技術分享圖片

  作為循環語句和判斷語句的入門題,相信看我博客的肯定都會。

技術分享圖片
#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;
}
( ̄▽ ̄)/

p1044韓信點兵