产生数

问题描述

给出一个整数 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 fa;
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=(n
a+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;

}

posted @   地球修者  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示