1. 程式人生 > >數字三元組(數字方格)

數字三元組(數字方格)

非常簡單的一道題,但一開始不知道一些符號的優先順序導致程式一直錯誤

一種簡單的方法就是a1,a2,a3三個數字都從0到n依次遍歷一遍,最後找到和的最大值

#include <iostream>
using namespace std;
int main()
{
    int n;
    int max=0;
    cin>>n;
    int a1,a2,a3;
    for(a1=0;a1<=n;++a1){
        for(a2=0;a2<=n;++a2){
            if((a1+a2)%2)
                continue;
            for(a3=0;a3<=n;++a3){
                if((a2+a3)%3)
                    continue;
                if(!((a1+a2+a3)%5)&&(a1+a2+a3)>max)
                    // !的優先順序比%高,所以判斷a1 a2 a3之和為0要加括號
                    max=a1+a2+a3;
            }
        }
    }
    cout<<max;
    return 0;
}

另一種方法

  • a1從0到n遍歷
  • 因為a1+a2為2的倍數,所以,a1 a2同為奇數或偶數
  • a2+a3=3t,a3=3t-a2,且a3>0,即t>a2/3,尋找a3即可用一個計數器t從a2/3每次加1,直到a3>n為止
#include <iostream>
using namespace std;
int main()
{
    int n,max=0;
    int a1,a2,a3;
    cin>>n;
    for(int i=0;i<=n;++i){
        a1=i;
        if(a1%2){ //a1為奇數,a2也為奇數
            for(int j=1;j<=n;j+=2){
                a2=j;
                for(int t=a2/3;;++t){
                    a3=3*t-a2;
                    if(a3>n)
                        break;
                    if(a3>=0){
                        int m=a1+a2+a3;
                        if(!(m%5)&&m>max)
                            max=m;
                    }
                }
            }
        }
        else //a1為偶數
            for(int j=0;j<=n;j+=2){
                a2=j;
                for(int t=a2/3;;++t){
                    a3=3*t-a2;
                    if(a3>n)
                        break;
                    if(a3>=0){
                        int m=a1+a2+a3;
                        if(!(m%5)&&m>max)
                        // !的優先順序高於%
                            max=m;
                    }
                }
            }
    }
    cout<<max;
    return 0;
}

最後需要注意的是,!的優先順序要高於雙目運算子的