#include <iostream> #include <string> using namespace std; // 1.关于这里为什么对2的个数限制在8个,3的个数限制在2个。 // 1.数的增量只能由2和3来,2的增量是4-2=2,3的增量是3*3-3=6. // 2.我们要求的是 原来的数的和加上增量后可以被9整除 ( sum%9+(2*j+6*i) )%9==0 // 3.由于sum%9属于0-8范围内,因此 (2*j+6*i)%9 也应该在0-8范围内 // 余数 最小达到增量 // 1 10=2*5 // 2 2=2*1 // 3 12=2*6 or 12=6*2 // 4 4=2*2 // 5 14=2*7 // 6 6=2*3 or 6=6*1 // 7 16=2*8 // 8 8=2*4 // 由上表可以看出,2最大得有8个,6最大得有2个。 // 本题判断 9-sum%9==(2*j+6*i)%9即可 bool ist(string s) { int k = s.size(); int sum = 0, n1 = 0, n2 = 0; for (int i = 0; i < k; i++) { sum += s[i] - '0'; sum = sum % 9; if (s[i] == '2') n1++; if (s[i] == '3') n2++; } if (sum != 0) { int origin = 9 - sum; for (int i = 0; i <= min(n2, 2); i++) { for (int j = 0; j <= min(n1, 8); j++) { if (origin == (j * 2 + i * 6) % 9) { return true; } } } } else { return true; } return false; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; while (n--) { string s; cin >> s; if (ist(s)) { cout << "YES" << endl; } else { cout << "NO" << endl; } } }