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