关键在于是否知道"能被9整除的数,它各个位数的和也能被9整除".

这样就有了解题的思路:求出字符串的各个位数的和,再做判断;

sum的增量只有两种:

1. 2->4增量为2

2 . 3->9增量为6

使用count数组记录2和3出现的次数,

再使用循环来确定是否有组合能够让sum变为9的倍数即可.

#include <iostream>
using namespace std;
void solve(){
    int count[10]={0};
    string n;
    cin>>n;
    int sum=0;
    for(int i=0;i<n.length();i++){
        sum+=n[i]-'0';
        count[n[i]-'0']++;
    }
    //增量可能为3,6,当余数能被增量抵消时为好数.
    for(int i=0;i<=count[2];i++){
        for(int j=0;j<=count[3];j++){
            int temp = sum+2*i+j*6;
            if(temp%9==0){
                cout<<"YES"<<endl;
                return;
            }
        }
    }
    cout<<"NO"<<endl;
}
int main() {
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}