题目描述
波浪数是在一对数字之间交替转换的数,如 121212112121211212121 ,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数 191919191919191919 是一个十进制下的波浪数,它对应的十一进制数 121212121212121212 也是一个波浪数,所以十进制数 191919191919191919 是一个双重波浪数。
类似的可以定义三重波浪数,三重波浪数在三种不同的进制中都是波浪数,甚至还有四重波浪数,如十进制 300=606300=606300=606 (七进制)= 363363363 (九进制)= 454454454 (八进制)= 1A11A11A1 (十三进制)…,你的任务就是在指定范围内找出双重、三重、四重波浪数。
输入输出格式
输入格式:
单独一行包含五个用空格隔开的十进制整数,前两个数表示进制的范围( 2−322-322−32 ),第三与第四个数表示指定的范围( 1−100000001-100000001−10000000 ),第五个数为 2,3,42,3,42,3,4 中的一个,表示要找的波浪数的重数。
输出格式:
从小到大以十进制形式输出指定范围内的指定重数的波浪数。一行输出一个数。
输入输出样例
输入样例#1:
复制
10 11 190000 960000 2
输出样例#1:
复制
191919 383838 575757 767676 959595
妥妥的枚举,枚举区间的每一个数,枚举进制,检查是否为波浪数。
注意一定是一对树,不能所有的数都相同。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int b1,b2,l,r,n; 5 int chck(int num,int bs) 6 { 7 int f[2]={0},flg=0; 8 f[0]=num%bs,num/=bs; 9 f[1]=num%bs,num/=bs; 10 if(f[0]==f[1]) 11 return 0; 12 while(num) 13 { 14 if(f[flg]!=num%bs) 15 return 0; 16 flg^=1; 17 num/=bs; 18 } 19 return 1; 20 } 21 int main() 22 { 23 scanf("%d%d%d%d%d",&b1,&b2,&l,&r,&n); 24 for(int i=l;i<=r;i++) 25 { 26 int cnt=0; 27 for(int j=b1;j<=b2;j++) 28 cnt+=chck(i,j); 29 if(cnt==n) 30 printf("%d\n",i); 31 } 32 return 0; 33 }