
字符串输入,看所有位数加起来的数是不是3的倍数
是,直接输出,不是,删除1或2
特判全是1和全是2的情况
直接检测末尾数字可以特判2
特判1时,还要特判11和111,其他数字,k是奇数时是质数,k是偶数时是合数
cpp
#include<iostream>
#include<string>
using namespace std;
void solve() {
string n;cin >> n;
int k = n.size();
//特判全是2
if (n[k - 1] == '2') {
cout << 0 << " " << 2 << endl;
return;
}
int sum = 0;//每位数的和
int flag = 0;
for (int i = 0; i < k; i++) {
sum += n[i] - '0';
if (n[i] == '2')
flag = 1;
}
if (sum % 3 == 0) {//3的倍数
cout << 0 << " " << 3 << endl;
return;
}
//1和2都有
if (flag) {
for (int i = 0; i < k; i++) {
if ((n[i] - '0') == (sum % 3)) {
cout << i + 1 << " " << 3 << endl;
return;
}
}
cout << -1 << " " << -1 << endl;
return;
}
//特判全是1
else {
if (k <= 3) {//特判11和111
cout << -1 << " " << -1 << endl;
return;
}
//k是奇数时是质数(随便删除一个1),k是偶数时是合数(直接输出)
cout << k % 2 << " " << 11 << endl;
return;
}
}
int main() {
int t;cin >> t;
while (t--) solve();
return 0;
}

