标题:九位累计可除数——递归解法
取消只看楼主
蓝色药剂
Rank: 4
等 级:业余侠客
帖 子:43
专家分:204
注 册:2007-11-24
结帖率:100%
 问题点数:0 回复次数:1 
九位累计可除数——递归解法
九位累计可除数 :

它是由1—9九位各不相同的数组成的一位九位数 ,它的前两位能被2整除,前三位能被3整除,前N位能被N整除,这个数能被9整除。

这个问题是在翻论坛原来的帖子看到的,觉得挺有意思的,所以拿来做了做。我就抛个砖头,希望可以引出美玉。我是用递归做的,如有错误望指正,也希望各位积极给出更多算法。ps:╮(╯▽╰)╭我写的算法还有点不好理解。。。只有这水平了,各位见谅。
程序代码:
#include <stdio.h>

char cNum[9] = {0,0,0,0,1,0,0,0,0};    // 代表1-9个数,被应用的值为1,没有应用的值为0
                                       // 注:五位数要求被5整除,5肯定只有一个位置能放,所以5的位置已经初始化为1了

void PrintNum(long nNum,int n)  // nNum:代表测试的数据,n:代表测试的位数
{
    //printf("%d,%ld\n",n,nNum);
    if(n==9)
    {
        printf("%ld\n",nNum);
        return ;
    }

    //if(n==1)
        //for(int i=2; i<9; i+=2)
            //PrintNum(nNum*10+i,2);

    if(n==4)                     // 专门处理5这个特殊值
        PrintNum(nNum*10+5,5);

    for(int i=0; i<9; i++)
    {
        if(!cNum[i])
        {
            cNum[i] = 1;
            long temp = nNum*10+i+1;
            if(!(temp%(n+1)))
            {
                PrintNum(temp,n+1);
                cNum[i] = 0;
            }
            else
            {
                cNum[i] = 0;
                continue;
            }
        }
    }
}

int main()
{
    printf("<<<<< 九位数累计可除数计算 >>>>>\n");
    for(int i=0; i<9; i++)
    {
        if(!cNum[i])
        {
            cNum[i] = 1;
            PrintNum(i+1,1);
            cNum[i] = 0;
        }
    }
    getchar();

    return 0;
}


搜索更多相关主题的帖子: 递归 解法 
2009-10-26 19:23
蓝色药剂
Rank: 4
等 级:业余侠客
帖 子:43
专家分:204
注 册:2007-11-24
得分:0 
回复 2楼 godbless
呵呵,原来论坛里面有的啊,是我没找到呢,哈哈,谢了
2009-10-27 08:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-290020-1-1.html




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

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