标题:整数串拆段
只看楼主
Jason_
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:88
专家分:66
注 册:2019-7-14
结帖率:66.67%
 问题点数:0 回复次数:1 
整数串拆段
请各位看看这题:
题目描述
将一个长度小于11位的数字串拆成2段,使其和为最小的素数。
例如数字串‘13304’
拆的方法有:
1 + 3304 = 3305
13 + 304 = 317
133 + 04 = 137
1330 + 4 = 1334
从上面可看出,和为素数的有:317 与137,最小的是137


输入
一个长度小于15的数字串
日常水题~~~

输出
最小的和为素数的数,若无素数则输出 -1
搜索更多相关主题的帖子: 素数 输出 最小 整数 数字 
2019-12-07 19:21
certificalt
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-8-18
得分:0 
纯模拟,很简单
//(water problem)
#include<bits/stdc++.h>
using namespace std;
const int mx=15;
string s;    //字符串方便
int a[mx],b[mx],i;
int C(string s){    //串转数
    int ans=0;
    while(s!=""){
        ans=ans*10+(s[0]-'0');
        s.erase(0,1);
    }
    return ans;
}
bool F(int n){    //素数
    for(int i=2;i<n;i++){
        if(n%i==0) return false;
    }
    return true;
}
int main()
{
    ios::sync_with_stdio(false);    //优化
    cin>>s;
    int l=s.size(),bl=0;
    for(i=0;i<l-1;i++){
        string s1="",s2="";    //前,后
        for(int j=0;j<=i;j++) s1+=s[j];    //前面的
        for(int j=i+1;j<=l-1;j++) s2+=s[j];    //后面的
        int p=C(s1),q=C(s2);    //加
        a[i]=p+q;    //导入
        //cout<<p<<' '<<q<<endl;
        //cout<<a[i]<<endl;
    }
    for(i=0;i<l-1;i++){
        if(F(a[i])){
            b[bl]=a[i];bl++;    //判断素数,求b数组的长度
            //cout<<b[bl];
        }
    }
    //cout<<bl<<endl;
    if(bl!=0)
        cout<<*min_element(b,b+bl);    //最小值
    else cout<<"-1";    //没有
    return 0;
}
2022-08-18 08:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498272-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.495375 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved