1、实验名称:回溯算法的应用
2、实验目的:掌握回溯算法的原理和设计方法
3、实验内容:构造一个尽可能大的数,使其从高到低前一位能对1整除,前2位能对2整除,……,前n位能对n整除(假设n不大于15)。记高精度数据为a1 a2……an,题目很明确有两个要求:
1)a1整除1且
(a1*10+a2)整除2且……
(a1*10n-1+a210n-2+……+an) 整除n;
2)求最大的这样的数。
#include<iostream>
using namespace std;
void fun(int n){
int min_num=1;
int max_num=0;
int temp_max_num=9;
for(int i=0;i<n-1;i++){
max_num=(max_num+temp_max_num)*10;
min_num*=10;
}
max_num+=temp_max_num;
//cout<<max_num<<endl<<min_num<<endl;
int *wei=new int[n];
for(int loop=max_num;loop>min_num;loop--){
int temp_loop=loop;
for(int j=n-1;j>-1;j--){
wei[j]=temp_loop%10;
temp_loop/=10;
}
int sum=wei[0];
int count_num=1;
for(int k=0;k<n-1;k++){
sum=sum*10+wei[k+1];
if(sum%(k+2)==0){
count_num++;
}
}
if(count_num==n){
for(int m=0;m<n;m++){
cout<<wei[m];
}
cout<<endl;
return;
}
}
}
int main(){
fun(9);
return 0;
}
由于C语言中int占4字节,能表示-2^31~2^31-1即-2147483648~2147483647,十位数,但对于这题封顶应该为9位
版权声明:本文为qq_39993896原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。