新生34场

整数拆分:

题目描述

小明最近在学习整数拆分,他在草稿纸上随手写下了一串数字,仅包含“0”~“9”这十种数字,长度不超过9。
现在你可以在这串数字中选出任意一个子串(不能为空,可以是原串),不能以数字“0”开始。小明想要知道,这些可能的子串构成的数,有多少个比他心目中的幸运数字x更大。
注:子串只要在原串中的起始或者终止位置不同,就认为是不同的子串;子串和x都是十进制的。

输入

第一行输入一个数字串S,仅包含数字“0”~“9”这十种数字,长度不超过9。
第二行包含一个整数x,表示小明的幸运数字。

输出

有多少个非“0”开始的子串,表示成十进制数后比x更大。

样例输入 Copy

1023
12

样例输出 Copy

3

提示

子串“23”、“102”和子串“1023”,都要比12更大。

对于50%的数据,S的第一个字母不超过“2”。
对于100%的数据,S仅包含数字“0”~“9”这十种数字,1<=S的长度<=9;0<=x<=777444111。 这两天是真的被双指针那些东西冲昏了头脑,真的真的,那么简单的一道题,为什么会被我做成那个样子 第一次想的太复杂了QAQ,nnd,我还在考虑位数和前导0啥的,位数相同的又干嘛干嘛。 返璞归真啊wc,上一下错误的代码,给自己一巴掌,hhh
#include<iostream>
#include<cstring> 
#include<algorithm>
using namespace std;
int main(){
    char ch[100];
    int x,len,f=0,t=0;
    cin>>ch;
    cin>>x;
    len=strlen(ch);
    for(int z=1;z<=len;z++)
    {
        for(int i=0;i<len;i++)
        {
            if(ch[i]=='0')
                int f=1;
            for(int j=i;j<i+z;j++)
            {
                if(f==1)
                {
                    int sum=0;
                    for(int k=i;k<j;i++)
                    {
                        sum=sum+ch[i]-'0';
                        sum*=10;
                    }
                    if(sum/10>x)
        .
      。
      。
      。
      。(省略号,hhhh)
return 0; }

真狠啊.....

明明可以直接把每一个数遍历一遍,遇到0就下一个循环,然后只要大于x的就++;哪来那么多事....

#include<iostream>
#include<cstring> 
#include<algorithm>
using namespace std;
int main(){
    char ch[1000];
    int len,x,t=0;
    cin>>ch;
    cin>>x;
    len=strlen(ch);
    for(int i=0;i<len;i++)
    {
        int sum=0;
        if(ch[i]=='0')
            continue;
        for(int j=i;j<len;j++)
        {
            sum=sum*10+(ch[j]-'0');
            if(sum>x)
                t++;
        }
    }
    cout<<t<<endl;
    return 0;
}

 

上一篇:算法-栈和队列(Java实现)


下一篇:洛谷P4735 最大异或和