题意:给出一个字符串,求变异后的字符串
思路:1 如果是字母,则当前字母的位置变为后面需要变异字母的总和,
2 如果是数字1-9则当前字母变为当前字母减一,并跳过当前数字的个数继续向后执行
可能我说的不好理解,这事我从poj中dicuss中复制的,可以参考一下:
大概意思是有一段字符串,如果是字母开头的,此字母就变成后面变异数的总和如果以数字开头,此数字变成N-1,然后从后面第N个开始变异如果以0开头,就不变。
这道题应该用递归,我对递归不是很明白啊,所以用的也不好。本人期待您的帮助(资料之类的!)
#include<iostream> #include<string> using namespace std;
char ss[15]; int n; char str[25]; const char end[] = "ENDOFINPUT";
int solve(int p) { if(str[p] == '0' || p == n) //如果是0或到头了,则结束 return 0; if(str[p] >= 'A' &&str[p] <= 'Z') //字母的处理 { int a = solve(p + 1); str[p] = a%10 + '0'; return a+1; } if(str[p] >= '1' && str[p] <= '9') //数字的处理 { str[p] = str[p] - 1; if((p + (str[p] - '0') + 1) < n) { int b = solve(p + (str[p] - '0') + 1); return b+1; } else //如果往后当前数字个字符不存在,则考虑当前字母的下一个字母 { int c = solve(p + 1); return c+1; } } } int main() { while(1) { cin>>ss; if(strcmp(ss,end) == 0) break; cin>>n>>str; cin>>ss; solve(0); cout<<str<<endl; } return 0; }