64,281
社区成员
发帖
与我相关
我的任务
分享
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;
}
#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的值,可以控制不同数字的位数
算法学的不好,效率估计不高,好歹可以正常跑起来,仅供参考,如有不当之处,请多指教