关键在于是否知道"能被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();
}
}

京公网安备 11010502036488号