字符串分割
(100分)题目描述:字符串分割
【字符串分割】给定非空字符在s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功则返回 0
2、若分割成功且分割结果不唯一则返回-1
3、若分割成功且分割结果唯一,则返回分割后的子串数目
输入描述: 1、输入字符串的最大长度为 200
输出描述:根据题目描述中情况返回相应的结果
备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。
示例:
输入
abc
输出
0
【字符串分割】给定非空字符在s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功则返回 0
2、若分割成功且分割结果不唯一则返回-1
3、若分割成功且分割结果唯一,则返回分割后的子串数目
输入描述: 1、输入字符串的最大长度为 200
输出描述:根据题目描述中情况返回相应的结果
备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。
示例:
输入
abc
输出
0
参考代码:
/* 标题:字符串分割 【字符串分割】给定非空字符在s,将该字符串分割成一些子串,使每个子串的ASCIIA码值的和均为水仙花数。 1、若分割不成功则返回 0 2、若分割成功且分割结果不唯一则返回-1 3、若分割成功且分割结果唯一,则返回分割后的子串数目 输入描述: 1、输入字符串的最大长度为 200 输出描述:根据题目描述中情况返回相应的结果 备注:“水仙花数”是指一个三位数,每位上数字的立方和等于该数字本身,如 371是“水仙花数”,因为:371=3^3+7^3+1^3。 示例: 输入 abc 输出 0 */ #include<bits/stdc++.h> using namespace std; void dfs(string& s, vector<string>& result, vector<vector<string>>& results); bool isStr(string str); int main() { string input; getline(cin, input); vector<vector<string>> results; vector<string> result; dfs(input, result, results); if(results.size() == 0) { cout << results.size() << endl; }else if(results.size() == 1) { cout << results[0].size() << endl; }else { cout << -1 << endl; } system("pause"); return 0; } void dfs(string& s,vector<string>& result,vector<vector<string>>& results) { if(s.length() == 0 ) { //此处已经分割到末尾,将分割后的字符串放入结果集中. results.push_back(result); } for (int i = 0; i < s.length(); i++) { //从头开始找字符串,判断是否是水仙花数 string head = s.substr(0, i + 1); if(!isStr(head)) { continue; } //已经切割了前面的水仙花,此处开始递归。 string tail = s.substr(i + 1, s.length() - 1 - i); result.push_back(head); dfs(tail, result, results); //回溯 result.pop_back(); } } bool isStr(string str) { int sum = 0; for (int i = 0; i < str.length(); i++) { sum = sum + str[i]; } if(sum < 100 || sum > 999) { return false; }else { if (sum == pow(sum % 10, 3) + pow(((sum / 10) % 10), 3) + pow((sum / 100), 3)) { return true; } } return false; }