C++ 发作所有每个数字不同的五位数

C++ 产生所有每个数字不同的五位数
#include<iostream>
using namespace std;
main()
{
int i,j,k;
int flag=1;//置标变量
int xx[6];//用于存储五个数值

for(i=10000;i<100000;i++)//所有五位数
{
for(j=0;j<5;j++)//将五位数的每个数分离出来并存储在xx数组中
{
xx[j]=i%10;
i=i/10;
}
             for(j=0;j<4;j++)//检测五个数是否对彼此不相等
 {  for(k=j+1;k<5;k++)
 {
 if(xx[j]==xx[k])
 flag=0;
 }
 }
 j=4;
while((flag==1)&&(j>=0))//若五个数互相不相等,则输出这个五位数
 {
 cout<<xx[j];
 j--;
 }
}
}
------解决方案--------------------


#include<iostream>
#include <set>
using namespace std;

int g_iCount=0;    //记录数据总个数
const int g_iPlaceNum=5;   //控制数据位数

void CalDiffNum(int iNum[g_iPlaceNum] ,int iIndex)
{
if(iIndex==g_iPlaceNum-1)
{
int iTemp=0;
for(int i=0;i<g_iPlaceNum;++i)
{
iTemp=iTemp+iNum[i]*(int)pow((double)10,(double)(g_iPlaceNum-1-i));
}
++g_iCount;
cout<<"第"<<g_iCount<<"个数:"<<iTemp<<endl;
}
else
{
++iIndex;
set<int> excl;
excl.insert(iNum,iNum+iIndex); //建立排除集
for(int i=0;i<10;++i)
{
if(!excl.count(i))
{
iNum[iIndex]=i;
CalDiffNum(iNum,iIndex); //递归调用
}
}
excl.clear();
}
}

void main()
{
int iNum[g_iPlaceNum]={0}; //保存每位的数据,iNum[0]表示最高位
for(int i=1;i<10;++i) //从最高为开始计算,最高位只能取1~9之间的数
{
memset(&iNum,0,sizeof(int)*g_iPlaceNum);
iNum[0]=i;
CalDiffNum(iNum,0);
}
}



这里用到了递归和标准库的set容器,通过修改g_iPlaceNum的值,可以控制不同数字的位数
算法学的不好,效率估计不高,好歹可以正常跑起来,仅供参考,如有不当之处,请多指教
------解决方案--------------------
感觉好的算法是:
1: 从0-9选N个不同数字
2:对于1产生的N个数据全排列
产生全排列的算法可以搜索一下
------解决方案--------------------
C++库里有全排列函数,直接调用即可,函数名不记得了,自己搜一下
------解决方案--------------------
啥也不说,直接上代码
int main()
{

int  i,j,k,m,n;
char buf[6]={0};
int  x=0;
for(i=1;i<=9;i++)
{
buf[0]=i+0x30;
for(j=0;j<=9;j++)
{
if(j==i) continue;
buf[1]=j+0x30;
for(k=0;k<=9;k++)
{
if(k==j
------解决方案--------------------
k==i) continue;
buf[2]=k+0x30;
for(m=0;m<=9;m++)
{
if(m==k
------解决方案--------------------
m==j
------解决方案--------------------
m==i) continue;
buf[3]=m+0x30;
for(n=0;n<=9;n++)
{
if(n==m
------解决方案--------------------
n==k
------解决方案--------------------
n==j
------解决方案--------------------
n==i) continue;
buf[4]=n+0x30;
sscanf(buf,"%d",&x);
printf("%d   ",x);
}
}
}
}
}
return 0;
}

------解决方案--------------------
引用:
Quote: 引用:

感觉好的算法是:
1: 从0-9选N个不同数字
2:对于1产生的N个数据全排列
产生全排列的算法可以搜索一下


说得容易!!!!!!C++  发作所有每个数字不同的五位数


http://www.cnblogs.com/caixu/archive/2011/10/31/2229862.html