求五位数是奇数的个数

依然是穷举,这些代码让人怀疑for循环天生就是为穷举而生!
题:从0~9的10个数字中,选出不重复的五位数,其个位数为奇数的可能为多少?

/*完整代码*/
#include <iostream>
using namespace std;
int a[5]={1,3,5,7,9};
int b[5];
int main()
{
    int n=0;
    for(int i=0;i<5;i++)/*第5位*/
    {
        b[4]=a[i];
        for(int j=0;j<10;j++)/*第1位*/
        {
            if(j!=0 && j!=b[4])
            {
                b[0]=j;
                for(int k=0;k<10;k++)/*第2位*/
                {
                    if(k!=b[0] && k!=b[4])
                    {
                        b[1]=k;
                        for(int h=0;h<10;h++)/*第3位*/
                            {
                                if(h!=b[0] && h!=b[1] && h!=b[4])
                                {
                                    b[2]=h;
                                        for(int g=0;g<10;g++)/*第4位*/
                                        {
                                            if(g!=b[2] && g!=b[4] && g!=b[0] && g!=b[1])
                                            {
                                                b[3]=g;
                                                n++;
                                                for(int v=0;v<5;v++)
                                                cout<<b[v]<<" ";
                                                cout<<endl;
                                            }
                                        }
                                }
                            }
                    }
                }
            }
        }
    }
     cout<<n<<endl;/*13440种可能*/                        
    return 0;
}

第二种解法:递归搜索

#include <iostream>
using namespace std;
#define n 10
int count=0;/*计数*/
int a[5];/*存放排列的数组*/
int flag[10];/*状态数组*/
int b[10]={0,1,2,3,4,5,6,7,8,9};/*待排数据*/
void f(int m)
{
if(m==5) /*分配完毕*/
{
    if((a[4]%2)!=0)/*五位数中,末位为奇数*/
    count++;
    if(a[0]==0 && (a[4]%2)!=0)/*减去首位为0的个数*/
    count--;
}
else
for(int i=0;i<10;i++)/*扫描状态数组*/
    if(flag[i]==0)
    {
        a[m]=b[i];
        flag[i]=1;
        f(m+1);
        flag[i]=0;
    }
}
int main()
{
f(0);
cout<<count;
return 0;
}
原文地址:https://www.cnblogs.com/tinaluo/p/5335132.html