逐位整除数

逐位整除数是一类新颖有趣的整数;

定义n位逐位整除数:从高位开始,高1位能被1整除(显然),高2位能被2整除,……,以此类推,整个n位数能被n整除

例如1024569就是一个7位逐位整除数,因为1024569能被7整除,高6位即102456能被6整除,高5位即10245能被5整除,……;

对指定的正整数n,搜索共有多少个不同的n位逐位整除数?存在n位逐位整除数的整数n是否有最大值?
试探索指定的n位逐位整除数,输出所有n位逐位整除数;

回溯设计

1.说明:

设置a数组,存放求解的逐位整除数的各位,a[1]存储最高位数字,a[2]存储次高位数字,……,a[n]存储n位数的个位数字;

在a数组中,数组元素a[1]为最高位,从1开始取值,显然能被1整除;a[2]从0开始取值,存放第2位数,前2位即a[1]*10+a[2]能被2整除;……
为了判别已取的 i 位数能否被i整除,设置 j 循环:

for(r=0,j=1;j<=1;j++)
{
   r=r*10+a[j];
   r=r%i;
}

1)、若r=0,即该i位数能被i整除,取标志量t=0,此时有两个选择:

  • 若已取了n位,则输出一个n位逐位整除数,最后一位增1后继续探索;
  • 若找不到n位,则 i=i+1 继续探索下一位;

2)、若r!=0,即前i位数不能被i整除,取标志量t=1,此时a[i]=a[i]+1,即第i位增1后继续;

若增值至a[i]>9,则a[i]=0即该位清零后i=i-1迭代回溯到前一位,直到第1位增值超过9后退出循环结束;

该算法可探索并输出所有n位逐位整除数,用s统计解的个数,若s=0,说明没有找到n位逐位整除数,输出“无解”;

2.程序设计:

#include<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值