原题链接:点击打开链接
康拓展开:
逆康拓展开:
应该可以看懂康拓了吧。。。
139 康拓展开 代码:
#include<stdio.h> #include<string.h> int f(int n) { int sum=1,a; for(a=2;a<=n;a++) sum*=a; return sum; } int main() { int a,b,c,n,m; scanf("%d",&n); getchar(); while(n--) { int ok[15],sum,max; int ac[15]={0}; char ch1; a=0;max=0; while(scanf("%c",&ch1)&&ch1!='\n') ok[a++]=ch1-'a'+1; for(b=0;b<a-1;b++) { sum=0;ac[ok[b]]=1; for(c=1;c<ok[b];c++) { if(ac[c]==0) sum++; } max+=sum*f(a-b-1); } printf("%d\n",max+1); } }143 逆康拓展开 代码:
#include<stdio.h> #include<string.h> long long sum[15]={1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600}; //存的是0~12的阶乘.. int main() { long long k,a,b,m,n,i,j; scanf("%lld",&k); while(k--) { long long max; int ok[15]; memset(ok,0,sizeof(ok)); scanf("%lld",&max); max--;//注意。。 for(a=12;a>0;a--) { j=max/sum[a-1]; i=0; max=max%sum[a-1]; for(b=1;b<=12;b++) { if(ok[b]==0) {i++;} if(i==j+1) break; } printf("%c",b+96); ok[b]=1; //标记。。 } printf("\n"); } }
本文深入解析了C++语言中康拓算法及其逆算法的应用,通过具体代码实例,详细解释了算法实现过程及其实用场景。包括139康拓展开代码和143逆康拓展开代码的解析。
268

被折叠的 条评论
为什么被折叠?



