问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

字串变换

发布网友 发布时间:2022-05-01 15:24

我来回答

1个回答

热心网友 时间:2023-10-21 16:23

实际上 问题 可以这样理解

从A到B最少1 步 最多可能走 N 步
每步有M种方法可选
只要找对一条路径就结束

总共有方法数是

1: M
2: M^2
3: M^3
..
N: M^N
------- +
M+M^2+...+M^M

利用穷举法递归搜索

M=3 N=10 时
3+3^2+3^3+3^4+3^5+3^6+...+3^10
=88572

#include <iostream>
#include <cmath>
#include <cstring>
#include <iomanip.h>
//定义最大搜索深度
#define NX 10
//规则数
#define M 3
using namespace std;

bool tc(char * a,char * b,char * a1,char * b1){ //按给定规则转换串 成功true
int ika=0;
int ikb=0;
bool found=true;
bool changed=false;
int lena1=strlen(a1);
int lenb1=strlen(b1);
while(a[ika]){
found=true;
for(int i=0;i<lena1;i++){
if(a[ika+i]!=a1[i]){
found=false;
break;
}
}
if(found){
changed=true;
ika+=lena1;
for(int j=0;j<lenb1;j++){
b[ikb]=b1[j];
ikb++;
}
}else{
b[ikb++]=a[ika++];
}
}
return changed;
};
bool comp(char * a,char *b){ //字串比较
int len=strlen(a);
if (len!=strlen(b)){
return false;
}
for(int i=0;i<len;i++){
if(a[i]!=b[i])return false;
}
return true;
};

bool tz(char * a , char * b ,char c[][2][20],int n,int m)
//深度优先递归算法搜索 广度优先算法仅将 tz 调用部分放到循环完成以后
{
char aa[m][20];
if(n>NX)return false; //搜索深度控制
cout.width(22);
cout<<a<<"?===>";
cout.width(22);
cout<<b<<endl;
for(int xi=0;xi<m;xi++){
if(tc(a,aa[xi],c[xi][0],c[xi][1])){
if(comp(aa[xi],b)){
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<aa[xi];
cout.width(20);
cout<<c[xi][0]<<"-->";
cout.width(20);
cout<<c[xi][1]<<endl;
return true; //搜索结束找到结果
}else{
if(tz(aa[xi],b,c,n+1,m)){搜索该支
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<aa[xi];
cout.width(20);
cout<<c[xi][0]<<"-->";
cout.width(20);
cout<<c[xi][1]<<endl;
return true;//搜索结束找到结果
}else{
continue;//专向下一支
}
}
}else{
continue; //该分支不再向下搜索
}
}
return false;

}

int main()
{

char a[20]="abcd";
char b[20]="xyz";
char c[6][2][20]={"abc","xu","ud","y","y","yz"};

if (tz(a,b,c,0,3)){
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<b;
cout<<"solved!!"<<endl;;

}else{
cout<<"unsolved!!"<<endl;
}
}

热心网友 时间:2023-10-21 16:23

实际上 问题 可以这样理解

从A到B最少1 步 最多可能走 N 步
每步有M种方法可选
只要找对一条路径就结束

总共有方法数是

1: M
2: M^2
3: M^3
..
N: M^N
------- +
M+M^2+...+M^M

利用穷举法递归搜索

M=3 N=10 时
3+3^2+3^3+3^4+3^5+3^6+...+3^10
=88572

#include <iostream>
#include <cmath>
#include <cstring>
#include <iomanip.h>
//定义最大搜索深度
#define NX 10
//规则数
#define M 3
using namespace std;

bool tc(char * a,char * b,char * a1,char * b1){ //按给定规则转换串 成功true
int ika=0;
int ikb=0;
bool found=true;
bool changed=false;
int lena1=strlen(a1);
int lenb1=strlen(b1);
while(a[ika]){
found=true;
for(int i=0;i<lena1;i++){
if(a[ika+i]!=a1[i]){
found=false;
break;
}
}
if(found){
changed=true;
ika+=lena1;
for(int j=0;j<lenb1;j++){
b[ikb]=b1[j];
ikb++;
}
}else{
b[ikb++]=a[ika++];
}
}
return changed;
};
bool comp(char * a,char *b){ //字串比较
int len=strlen(a);
if (len!=strlen(b)){
return false;
}
for(int i=0;i<len;i++){
if(a[i]!=b[i])return false;
}
return true;
};

bool tz(char * a , char * b ,char c[][2][20],int n,int m)
//深度优先递归算法搜索 广度优先算法仅将 tz 调用部分放到循环完成以后
{
char aa[m][20];
if(n>NX)return false; //搜索深度控制
cout.width(22);
cout<<a<<"?===>";
cout.width(22);
cout<<b<<endl;
for(int xi=0;xi<m;xi++){
if(tc(a,aa[xi],c[xi][0],c[xi][1])){
if(comp(aa[xi],b)){
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<aa[xi];
cout.width(20);
cout<<c[xi][0]<<"-->";
cout.width(20);
cout<<c[xi][1]<<endl;
return true; //搜索结束找到结果
}else{
if(tz(aa[xi],b,c,n+1,m)){搜索该支
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<aa[xi];
cout.width(20);
cout<<c[xi][0]<<"-->";
cout.width(20);
cout<<c[xi][1]<<endl;
return true;//搜索结束找到结果
}else{
continue;//专向下一支
}
}
}else{
continue; //该分支不再向下搜索
}
}
return false;

}

int main()
{

char a[20]="abcd";
char b[20]="xyz";
char c[6][2][20]={"abc","xu","ud","y","y","yz"};

if (tz(a,b,c,0,3)){
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<b;
cout<<"solved!!"<<endl;;

}else{
cout<<"unsolved!!"<<endl;
}
}

热心网友 时间:2023-10-21 16:23

实际上 问题 可以这样理解

从A到B最少1 步 最多可能走 N 步
每步有M种方法可选
只要找对一条路径就结束

总共有方法数是

1: M
2: M^2
3: M^3
..
N: M^N
------- +
M+M^2+...+M^M

利用穷举法递归搜索

M=3 N=10 时
3+3^2+3^3+3^4+3^5+3^6+...+3^10
=88572

#include <iostream>
#include <cmath>
#include <cstring>
#include <iomanip.h>
//定义最大搜索深度
#define NX 10
//规则数
#define M 3
using namespace std;

bool tc(char * a,char * b,char * a1,char * b1){ //按给定规则转换串 成功true
int ika=0;
int ikb=0;
bool found=true;
bool changed=false;
int lena1=strlen(a1);
int lenb1=strlen(b1);
while(a[ika]){
found=true;
for(int i=0;i<lena1;i++){
if(a[ika+i]!=a1[i]){
found=false;
break;
}
}
if(found){
changed=true;
ika+=lena1;
for(int j=0;j<lenb1;j++){
b[ikb]=b1[j];
ikb++;
}
}else{
b[ikb++]=a[ika++];
}
}
return changed;
};
bool comp(char * a,char *b){ //字串比较
int len=strlen(a);
if (len!=strlen(b)){
return false;
}
for(int i=0;i<len;i++){
if(a[i]!=b[i])return false;
}
return true;
};

bool tz(char * a , char * b ,char c[][2][20],int n,int m)
//深度优先递归算法搜索 广度优先算法仅将 tz 调用部分放到循环完成以后
{
char aa[m][20];
if(n>NX)return false; //搜索深度控制
cout.width(22);
cout<<a<<"?===>";
cout.width(22);
cout<<b<<endl;
for(int xi=0;xi<m;xi++){
if(tc(a,aa[xi],c[xi][0],c[xi][1])){
if(comp(aa[xi],b)){
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<aa[xi];
cout.width(20);
cout<<c[xi][0]<<"-->";
cout.width(20);
cout<<c[xi][1]<<endl;
return true; //搜索结束找到结果
}else{
if(tz(aa[xi],b,c,n+1,m)){搜索该支
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<aa[xi];
cout.width(20);
cout<<c[xi][0]<<"-->";
cout.width(20);
cout<<c[xi][1]<<endl;
return true;//搜索结束找到结果
}else{
continue;//专向下一支
}
}
}else{
continue; //该分支不再向下搜索
}
}
return false;

}

int main()
{

char a[20]="abcd";
char b[20]="xyz";
char c[6][2][20]={"abc","xu","ud","y","y","yz"};

if (tz(a,b,c,0,3)){
cout.width(22);
cout<<a<<" ==> ";
cout.width(22);
cout<<b;
cout<<"solved!!"<<endl;;

}else{
cout<<"unsolved!!"<<endl;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
锅炉切圆直径调整 为什么我打开excel后是灰色的? 有没有什么值得推荐的投资港股的QDII基金? - 知乎 win10电脑屏幕亮度调不了怎么办 考焊工证具体怎么操作 广汽传祺是丰田技术吗 广汽传祺与广汽丰田有关系吗 怎样才能让不愿写作业的孩子听话? 上初中不写作业不想学习的孩子应该如何管教? 出生在2020年农历七月十二日的宝宝怎么取名有内涵? 多哈回合谈判各方呼吁 使用LENB(A1)-LEN(A1)的函数提取字符串中的汉字不显示结果 求一些生僻的花的名字~~要好听和少见哦!只在书上记载过也可以~ 被盗了,也被改了,怎么办? 用Excel将“8607唐山教育学院”中的数字与文字分离,怎么做? 贤海芬名字的含义 被盗用了该怎么办 急求男孩名字由水和木字旁组成的好听的有内涵的名字请大师多起几个谢谢 我的被人盗用了怎么办? 五行缺水的名字尾要加桐 海桐花有哪些生活习性? 吸味且寓意好的植物 DUBAI 的信用证问题 沙特的产地证一定是贸促会出的么?CCIC 出具可以么?客户说: issued by *it,指贸促会出具? 菲律宾进口机械是否需要CCPIT认证? 贸促会产地证背面有字吗 印度签证必须有贸促会开具的ccpit 认证吗 印度地区原产地证一定要贸促会ccpit证书才行吗 iPhone13+pro会有这样的问题了+锁屏电源键按亮屏前会暗1-2秒然后再亮_百度问一问 苹果13刚解锁前几秒没网是 iphone13promax一关屏幕就断网- 问一问 EXCEL问题,最近我发现我的表有问题,如A1中为&quot;你好123&quot;,LENB(A1)这个公式的结果为什么和LEN(A1)相同,都是5 中国平安养老商业保险 别人把我的盗了,我该怎么办? =LEFT(A1,LENB(A1)-LEN(A1)) =RIGHT(A1,LEN(A1)*2-LENB(A1)) 是用来分开一个单元格的内汉字和数字的。 =LEFT(A1,LENB(A1)-LEN(A1)) =RIGHT(A1,LEN(A1)*2-LENB(A1)) 是用来分开一个单元格的内汉字和数字的。 高精度乘法。输入两个正整数,求它们的积。 中间标注的地方,想了好长时间还很模糊,有没有简单的理解。 =LEFT(A1,LENB(A1)-LEN(A1))提取汉字? 我的被盗了,我没有绑定,密码也被改了,怎么办? 高精度计算的高精度乘法 高精度计算的高精度乘法 别样红好不好 被盗了,没办法找回,怎么办 在EXCEL中的公式=MID(A1,MATCH(1,1&#47;(MID(A1,ROW($1:$100),1)&gt;=&quot;啊&quot;),),LENB(A1)-LEN(A1))。 公寓管理软件哪个最好? 竹子那么硬,为什么大熊猫还吃得津津有味? 为什么熊猫能把竹子吃得那么香? 求助c语言实现高精度乘法 酒店式短租公寓怎样经营? c++程序求解!高精度加法,输入:1 1,输出:-1-61(应该是2吧) c++程序求解!高精度加法,输入:1 1,输出:-1-61(应该是2吧)