zoukankan      html  css  js  c++  java
  • 找倍数(回溯)

    时限:1000ms 内存限制:10000K  总时限:3000ms

    描述:

    对于每个输入的数字(如:2),则要求 给出一个由1,0构成的十进制整数,且该整数为输入数字的某个倍数,且是满足该条件的最小数(如2对应的10)。

    输入:

    数字n,n等于0时停止。

    输出:

    n的一个满足条件的最小倍数。

    输入样例:

    2
    0

    输出样例:

    10

    #include<stdio.h>
    #include<stdlib.h>
    #define deep 20
    int n;//待查的数
    int Arr[20]={0};//存放由0,1构成的十进制数的每一位
    int Crr[20]={0},t=0;//用于保存
    int p;//标记串有效部分的起始下表
    int flag=0;//标记否找的最小倍数
    
    void search(int m);
    void check();
    /////////////////////////////////////////////////////////////////
    int main()
    {
        int i=0;
        scanf("%d",&n);//输入待查找的数
        while(n!=0)
        {
            search(0);
            if(flag==1)
            {    for(int i=0;i<t;i++)//从串中有效数开始输出0,1串组成的十进制数
                    printf("%d",Crr[i]);
                putchar(10);//换行,相当于printf("\n");
            }
    
            flag=0;//下一轮
            for(i=0;i<deep;i++)
               Arr[i]=0;  
            scanf("%d",&n);
        }
        return 0;
    }
    ///////////////////////////////////////////////////////////
    void search(int m)//0~20
    {
        if(m==deep)//到达搜索深度
        {   if(flag==0)
            {    check();
                if(flag==1)    return;
            }
        }
        else
        {
            Arr[m]=0;
            search(m+1);
            Arr[m]=1;
            search(m+1);
        }
    }
    void check()
    {
        int i=0;
        while(Arr[i]==0 &&i<deep)    i++;//查找串中有效数的起始位置
    
        ///////串中所有的数都为0
        if(i==deep)    return ;
        p=i;//从p(Arr[i]=1)位置开始,串中数有效
        if(p==deep-1)///////只有最后一位有效时,待查的数是1才满足倍数关系
        {   if(n==1)  flag=1; 
            return ;//不n=1与否此时都可以返回
        }
        else
        {    t=0;
            int Brr[20]={0};//用于判断是否满足倍数关系
            for(i=0;i<deep;i++)  Crr[i]=0;//用于保存有效0,1串
    
            for(i=p;i<deep;i++)  { Brr[t]=Arr[i]; Crr[t++]=Arr[i]; }    
            for(i=0;i<t-1;i++)
                Brr[i+1]=(Brr[i]*10+Brr[i+1])%n;//一种判断是否是n的倍数的方法
            if(Brr[t-1]%n==0)
            {   flag=1; return ;}
        }
    }
  • 相关阅读:
    硬盘坏道及后续的拯救工作
    Extension GL_VERSION_1_2 could not be loaded.
    js显示当前的年月日时分秒
    如何删除桌面上的回收站?
    Fedora 15 U盘 安装心得
    庄子·内篇·逍遥游
    Additional Oracle Performance Extensions
    Features Specific to JDBC OCI Driver
    OracleDatabase 配置
    vim字符编码设置
  • 原文地址:https://www.cnblogs.com/IThaitian/p/2594908.html
Copyright © 2011-2022 走看看