解题思路:字符排列总数等于:字符总数的全排列数/重复字符次数的阶乘
参考代码:
#include <stdio.h> #include <string.h> int main() { char str[255]; //保存输入字符串 int a[26]={0},A[26]={0};//a[]记录小写字符的重复的次数, int n,i,j; //A[]记录大写字符的重复的次数。 int num = 1,m; scanf("%d",&n); //输入字符串的个数 getchar(); //吃掉回车键,不然会占用下一个数组的空间 for(i=0; i<n; i++) { scanf("%c",&str[i]); if(str[i]>='a' && str[i]<='z') { a[str[i]-97]++; } if(str[i]>='A' && str[i]<='Z') { A[str[i]-32]++; } } for(i=1; i<=n; i++) //字符全排列总数 { num *= i; } for(i=0; i<26; i++) { if(a[i] > 1) //小写字母重复排列的总数 { m = 1; for(j=1; j<=a[i]; j++) { m *= j; } num /= m; } if(A[i] > 1) //大写字母重复排列的总数 { m = 1; for(j=1; j<=A[i]; j++) { m *= j; } num /= m; } } printf("%d\n",num); return (0); }
欢迎点评!!!
0.0分
5 人评分
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:604 |
简单的a+b (C语言代码)浏览:783 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:643 |
兰顿蚂蚁 (C++代码)浏览:1225 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:613 |
简单的a+b (C语言代码)浏览:564 |
兰顿蚂蚁 (C++代码)浏览:1160 |
WU-复数求和 (C++代码)浏览:2119 |
The 3n + 1 problem (C语言代码)浏览:603 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1322 |