數字三元組(數字方格)
阿新 • • 發佈:2018-12-16
非常簡單的一道題,但一開始不知道一些符號的優先順序導致程式一直錯誤
一種簡單的方法就是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; }
最後需要注意的是,!的優先順序要高於雙目運算子的