产生数
问题描述
给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。
规则:
一位数可变换成另一个一位数,变换得到的数不能为零。
例如:n=234。有规则(k=2):
2-> 5
3-> 6
上面的整数 234 经过变换后可能产生出的整数为(包括原数):
234
534
264
564
共 4 种不同的产生数
问题:
给出一个整数 n 和 k 个规则。
求出:
经过任意次的变换(0次或多次),能产生出多少个不同整数。
仅要求输出个数。
输入说明
n k
x1 y1
x2 y2
... ...
xn yn
输出说明
一个整数(满足条件的个数)
include
include
include
include
include
include
using namespace std;
int n=0; int mapp[10][10]={0};
int flag[10]={0};
void func(int a){
flag[a]=1;
n++;
for(int i=0;i<10;i++){
if(flag[i]0){
if(mapp[a][i]1){
func(i);
}
}
}
}
vector
void multi(int a){
int tmp=0;
for(int i=0;i<fa.size();i++){
int n=fa[i]-'0';
fa[i]=(na+tmp)%10+'0';
tmp=(na+tmp)/10;
}
if(tmp!=0){
fa.push_back(tmp+'0');
}
}
int main(){
string number;
int r;
cin>>number>>r;
int a,b;
for(int i=0;i<r;i++){
cin>>a>>b;
mapp[a][b]=1;
}
unsigned long long ans=1;
int change[10];
for(int i=0;i<10;i++){
n=0;
//flag[10]={0};//
for(int j=0;j<10;j++) flag[j]=0;
func(i);
change[i]=n;
}
fa.push_back('1');
for(int i=0;i<number.size();i++){
int num=number[i]-'0';
multi(change[num]);
}
for(int i=fa.size()-1;i>=0;i--){
int n=fa[i]-'0';
cout<<n;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构