每日一题洛谷T534125 合数c++

字符串输入,看所有位数加起来的数是不是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;
}
相关推荐
太空1号几秒前
飞腾D2000,麒麟系统V10,docker,ubuntu1804,小白入门喂饭级教程
linux·c++·docker
小疯仔5 分钟前
使用el-input数字校验,输入汉字之后校验取消不掉
android·开发语言·javascript
C_Liu_7 分钟前
C语言:字符函数和字符串函数
c语言·开发语言
编程乐学(Arfan开发工程师)14 分钟前
34、请求处理-【源码分析】-Model、Map原理
java·开发语言·spring boot·后端
Matlab仿真实验室18 分钟前
基于Matlab实现LDA算法
开发语言·算法·matlab
誰能久伴不乏26 分钟前
深度解析 Qt 最顶层类 QObject:继承关系与内存生命周期管理
开发语言·qt
@蓝莓果粒茶31 分钟前
LeetCode第244题_最短单词距离II
c++·笔记·学习·算法·leetcode·职场和发展·c#
多多*32 分钟前
蓝桥杯国赛训练 day1
java·开发语言·数据库·redis·缓存·职场和发展·蓝桥杯
iCxhust1 小时前
Deepseek给出的8255显示例程
c语言·开发语言·c++·单片机·嵌入式硬件
好奇的菜鸟1 小时前
Java数据校验:确保数据完整性和正确性
java·开发语言