输入一个2~10之间的正整数n,使用字典序法计算并且按照升序输出A~Z中的前n个字母的全排列。C++编译器崩溃

问题:输入一个2~10之间的正整数n,使用字典序法计算并且按照升序输出A~Z中的前n个字母的全排列。比如:输入3;输出:ABC,ACB,BAC,BCA,CAB,CBA.用C或者C++实现。

我的代码如下:其中使用了sort()和next_permutation()函数。

// next_permutation函数实现的升序全排列
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int n=2;
int myints[]={65,66};
cin>>n;
for(int i=0;i<n;i++)
{
myints[i]=65+i;
}
cout << "升序全排列是\n";
sort (myints,myints+n);//排序,升序
do {
for(int i=0;i<n;i++)
{cout <<char( myints[i] );
if(i==n-1)
{cout<<"\n";}
}
}
while ( next_permutation (myints,myints+n) );
return 0;
}
编译和链接均无任何问题,在C编译器甚至可以很好的运行。可是一到C++编译器,不管是VC++6.0还是Dev-C++都会在输入比3大的数字的时候崩溃掉,究竟是什么问题呢???谢谢了!!!

问题是你的数组myints只有两个元素,是静态数组
可以改用动态数组, 代码如下
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int n=2;
// int myints[]={65,66}; // 此句注释掉

cin>>n;
int * myints=new int[n]; // 此句增加
for(int i=0;i<n;i++)
{
myints[i]=65+i;
}
cout << "升序全排列是\n";
sort (myints,myints+n);//排序,升序
do {
for(int i=0;i<n;i++)
{cout <<char( myints[i] );
if(i==n-1)
{cout<<"\n";}
}
}
while ( next_permutation (myints,myints+n) );
delete []myints; // 释放内存
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-20
你的myints数组只分配了2个空间,超过3个九越界了,定义
int myints[26]={‘A', 'B', ...,'Z'},中间的...需要自己填满,26个一个都不能少追问

原来。。。。。。。。如此。。。。。。。。。。。。。。。。。感激不尽!!!

相似回答