poj1302解题报告

题意:给出一个字符串,求变异后的字符串
思路: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值