| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1050 人关注过本帖
标题:帮小弟看看这个程序,到底出错在哪
只看楼主 加入收藏
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
结帖率:50%
收藏
 问题点数:0 回复次数:3 
帮小弟看看这个程序,到底出错在哪
程序题目为:
Description

有n个字母,列出由该字母组成的字符串的全排列(相同的排列只计一次)。

Input

第一行输入是字母个数n,1<=n<=20。接下来一行输入的是待排列的n个字母。


Output

计算出的n 个字母的所有不同排列总数

Sample Input


4
aacc

Sample Output


6
我的编程思路采取排列组合的方法,即如果有n个字母,有m个是相同的,则总排列总数肯定为n的阶乘除以m的阶乘,还要注意小弟下面的程序是用c++软件运行的,运行结果是对的,但在网站上提交的时候却错了,所以想请各位看看问题在哪
我编的程序为:
#include<iostream>
using namespace std;
int f(int n) //函数f的功能是求n 的阶乘,因为如果有n个不同字母进行排列组合,肯定有n阶乘种方法,
{int z=1,i;
for (i=1;i<=n;i++)
 z=z*i;
return z;}
int main()
{char a[20];
int i,j,k,x=1,b,m,n=0;
cin>>b;m=f(b); // 输入变量b,并求出其阶乘
for (i=0;i<b;i++)// 输入b个字母
    cin>>a[i];
for (i=1;i<b;i++)//看b个字母当中,总共有几个与第一个字母相同,用x做计数器,然后用排列组合方法,除去与第一个字母相同的排列组合,并将x赋原
    if (a[0]==a[i])x++;m=m/f(x);x=1;
for (i=1;i<b-1;i++)//采用上面的方法,将第二个字符到第b-2个字母依次进行检查,看其后面有几个字母与被检查的字母相同,但是....
    {for (k=0;k<i;k++) // 但是这里要考虑,考虑被检查的字母跟前面所有的字母是否相同,如果相同,再除以这个字母的阶乘,显然就重复了,所以..
    if (a[i]!=a[k])n++; // 所以考虑不相同的,
    if (n==i)  // 如果n等于i,则证明a[i]与前面的字母全不相同,所以就可以用排列组合方法
        {for (j=i+1;j<b;j++)
        if (a[i]==a[j] ){x++;m=m/f(x);x=1;}}}
    cout<<m;}
搜索更多相关主题的帖子: 字母 include 字符串 
2011-11-14 23:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
求阶乘时溢出了,换成64位整型。

重剑无锋,大巧不工
2011-11-14 23:08
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
收藏
得分:0 
回复 2楼 beyondyf
还是错的
2011-11-15 15:27
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
收藏
得分:0 
回复 2楼 beyondyf
不过我也知道错在哪了,是错在数据溢出的问题上
2011-11-15 15:30
快速回复:帮小弟看看这个程序,到底出错在哪
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018246 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved