站外题求助!
  • 板块学术版
  • 楼主1313113lmx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/27 17:23
  • 上次更新2024/1/27 19:24:42
查看原帖
站外题求助!
1042497
1313113lmx楼主2024/1/27 17:23

题目描述

数学中的123就跟英语中的ABC一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的数字。

黑洞的值:

设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数。

例如:1234567890

1.偶:数出该数数字中的偶数个数,在本例中为2,4,6,8,0,总共有 5 个。

2.奇:数出该数数字中的奇数个数,在本例中为1,3,5,7,9,总共有 5 个。

3.总:数出该数数字的总个数,本例中为 10 个。

4.新数:将答案按 “偶-奇-总” 的位序,排出得到新数为:5510。

5.重复:将新数5510按以上算法重复运算,可得到新数:134。

6.重复:将新数134按以上算法重复运算,可得到新数:123。

求输入一个数字串,输出其中所有可能得到的新数直到123。 我的代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5,MAXB=2e7;
#define ll long long
int hd123(string s){
    if(s=="123")
       return 0;
    int j=0,o=0,z;
    z=s.size();
    for(int i=0;i<s.size();i++){
        if(int(s[i]-'0')%2==1)
            j++;
        else
            o++;
    }
    string ss="";
    while(z>0){
        ss=char((z%10)+'0')+ss;
        z/=10;
    }if(j==0)
        ss+='0';
    while(j>0){
        ss=char((j%10)+'0')+ss;
        j/=10;
    }
    if(o==0)
        ss+='0';
    while(o>0){
        ss=char((o%10)+'0')+ss;
        o/=10;
    }
    cout<<ss<<endl;
    hd123(ss);
    return 0;
}
int main() {
    string s;
    cin>>s;
    hd123(s);
	return 0;
}

2024/1/27 17:23
加载中...