解题思路:
思路1:暴力排列,运用STL中的next_permutation函数
#include <cstdio> #include <algorithm> #include <iostream> #include <string> using namespace std; int main(){ string s; cin>>s; string str=s; unsigned int res=0; sort(s.begin(),s.end()); do { if(s==str) break; res++; }while(next_permutation(s.begin(),s.end())); printf("%u",res); return 0; }
思路2:康托展开
阶乘可以打一个表,也可写一个函数
#include <cstdio> #include <algorithm> #include <string> #include <iostream> using namespace std; int fac[12]={1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800}; //寻找比当前元素更小的且在后面的元素 int smaller(string s,int index) { int res=0; for(int i=index;i<s.length();i++) { if(s[i]<s[index]) res++; } return res; } int main(){ string s; cin>>s; int len=s.length(),res=0,sum=0; for(int i=0;i<len;i++) { sum=smaller(s,i); res+=sum*fac[len-i-1]; } printf("%d",res); return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题7.4 (Java代码)浏览:839 |
剔除相关数 (C语言代码)浏览:1008 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:450 |
C语言训练-排序问题<1> (C语言代码)浏览:599 |
用筛法求之N内的素数。 (C语言代码)浏览:1232 |
简单的a+b (C语言代码)浏览:524 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:647 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:581 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:486 |
C二级辅导-同因查找 (C语言代码)浏览:563 |