每日一题洛谷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;
}
相关推荐
1024奇点2 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch3 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
FlightYe3 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
Knight_AL3 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing034 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by209995 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河5 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮5 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻5 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble5 小时前
C++ 用互斥锁实现读写锁
开发语言·c++