解题思路:
思路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语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:577 |
【亲和数】 (C语言代码)浏览:541 |
本人酷爱递归实现很多问题,这里也是浏览:632 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:268 |
C二级辅导-温度转换 (C语言代码)浏览:802 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:587 |
找出最长的字符串来 (C语言代码)浏览:1840 |
班级人数 (C语言代码)浏览:980 |
【偶数求和】 (C++代码)浏览:744 |