题目描述
波浪数是在一对数字之间交替转换的数,如 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 妥妥的枚举,枚举区间的每一个数,枚举进制,检查是否为波浪数。
注意一定是一对树,不能所有的数都相同。
#include<iostream>
#include<cstdio>
using namespace std;
int b1,b2,l,r,n;
int chck(int num,int bs)
{
int f[]={},flg=;
f[]=num%bs,num/=bs;
f[]=num%bs,num/=bs;
if(f[]==f[])
return ;
while(num)
{
if(f[flg]!=num%bs)
return ;
flg^=;
num/=bs;
}
return ;
}
int main()
{
scanf("%d%d%d%d%d",&b1,&b2,&l,&r,&n);
for(int i=l;i<=r;i++)
{
int cnt=;
for(int j=b1;j<=b2;j++)
cnt+=chck(i,j);
if(cnt==n)
printf("%d\n",i);
}
return ;
}