问题标题: 酷町堂:3819 好玩的数字对折 40分求解

0
0
已解决
陈振轩
陈振轩
高级光能
高级光能
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string s, str = "";
int m;
int main(){
    cin >> s >> m;
    for (int i = 0; i < s.size(); i ++) s[i] -= '0';
    while(m --) {
        int left = s.size() / 2 - 1, right = s.size() % 2 == 1 ? s.size() / 2 + 1 : s.size()/2;  //1 2 4 5
        if (s.size() % 2 == 1) str = s[left + 1];
        while (left >= 0 && right < s.size()) {
            char c = (s[left] + s[right]);
            string x = "";
            x += c;
            str = str + x;
            left --;
            right ++;
        }
//      for (int i = 0; i < str.size(); i ++) {
//          cout << int(str[i]);
//          if (i != str.size() - 1) cout << ":";
//      } cout << endl;
//      int cnt = 0;
        for (int i = 0; i < str.size(); i ++){
            if (str[i] > 9){
                char c = str[i] % 10; //4
                str[i] = 1;
                string snap = "";
                snap += c;
                str.insert(i + 1, snap);
                //cout << int(c) << "\n";
                //i ++;
//              cnt ++;
            }
        }
        s = str;
//      cout << cnt << endl;
        str = "";
    }
    for (int i = 0; i <= s.size()-1; i ++) cout << int(s[i]);
    return 0;
}

蒟蒻错误代码↑

大佬求解qwq


0
已采纳
郑金顺
郑金顺
中级光能
中级光能
/*
    总共处理m次

    1.遍历 该字符串
      左边折向右边
        对于位数是奇数还是偶数 用标志odd处理 奇数的情况ans先存x[n/2]这一位

    对应位相加,看到的结果用字符串y存储
        对应位相加的结果先用整数存储tmp
        在吧整数tmp==0的情况 y不能为空串

    字符串连接,最终得到的结果正着存,存到字符串ans

    ans首位连续的0要删去 
*/ 


and

核心

string f(string x){
    string ans="";
    int odd=0,n=x.size();
    if(n%2){
        odd=1;
        ans+=x[n/2];
    }
    for(int i=n/2+odd;i<n;i++){
        string y="";
        int tmp=x[i]+x[n-1-i]-'0'-'0';
        if(tmp==0){
            y="0";
        }
        else{
            while(tmp){
                y=char(tmp%10+'0')+y;
                tmp/=10;
            }
        }
        ans=ans+y;
    }
    while(ans[0]=='0'){
        ans.erase(0,1);
    }
    return ans;
}




0
我要回答