题解
2025-03-27 23:03:06
发布于:江西
2阅读
0回复
0点赞
题目“毒”了吗?
你“毒”懂了吗?
没有你就好好看。
正片开始了——
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100];
int sum=0;
string s="";
void f(string s,int layer,bool flag){//layer是啥,是层数
if(layer==n){
if(flag==1){//为啥有判断,应为它要先输总数
cout<<s<<endl; //输出组合
}else if(flag==0){
sum++;//总数增加
}
return;
}
if(a[layer]==2){
f(s+'a',layer+1,flag);
f(s+'b',layer+1,flag);
f(s+'c',layer+1,flag);
}else if(a[layer]==3){
f(s+'d',layer+1,flag);
f(s+'e',layer+1,flag);
f(s+'f',layer+1,flag);
}else if(a[layer]==4){
f(s+'g',layer+1,flag);
f(s+'h',layer+1,flag);
f(s+'i',layer+1,flag);
}else if(a[layer]==5){
f(s+'j',layer+1,flag);
f(s+'k',layer+1,flag);
f(s+'l',layer+1,flag);
}else if(a[layer]==6){
f(s+'m',layer+1,flag);
f(s+'n',layer+1,flag);
f(s+'o',layer+1,flag);
}else if(a[layer]==7){
f(s+'p',layer+1,flag);
f(s+'q',layer+1,flag);
f(s+'r',layer+1,flag);
f(s+'s',layer+1,flag);
}else if(a[layer]==8){
f(s+'t',layer+1,flag);
f(s+'u',layer+1,flag);
f(s+'v',layer+1,flag);
}else if(a[layer]==9){
f(s+'w',layer+1,flag);
f(s+'x',layer+1,flag);
f(s+'y',layer+1,flag);
f(s+'z',layer+1,flag);
}
//加上对应的字母
}
int main()
{
cin>>n;
for(int i=0 ; i<n ; i++){
cin>>a[i];
}
f(s,0,0);//只求总数
cout<<sum<<endl;
f(s,0,1);//求组合
return 0;
}
一张图教会你(φ的草稿,别太在意,草稿嘛)
φ:有缘再见~
这里空空如也
有帮助,赞一个