题目描述
波浪数是在一对不同数字之间交替转换的数,如 12121211212121,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数 191919191919 是一个十进制下的波浪数,它对应的十一进制数 121212121212 也是一个波浪数,所以十进制数 191919191919 是一个双重波浪数。特别地,只有一位的数也算作波浪数,例如 11。
类似的可以定义三重波浪数,三重波浪数在三种不同的进制中都是波浪数,甚至还有四重波浪数,如 300(10)=606(7)=363(9)=454(8)=1A1(13)300(10)=606(7)=363(9)=454(8)=1A1(13),下标表示采用的进制。你的任务就是在指定范围内找出双重、三重、四重波浪数。
输入格式
单独一行包含五个用空格隔开的十进制整数 l,r,L,R,kl,r,L,R,k。[l,r][l,r] 表示应当考虑的进制的范围,[L,R][L,R] 表示应当考虑的数字的范围,kk 表示你应该找的波浪数的重数。
输出格式
从小到大以十进制形式输出指定范围内的指定重数的波浪数。一行输出一个数。
输入输出样例
输入 #1
10 11 190000 960000 2
输出 #1
191919 383838 575757 767676 959595
话不多说直接上程序:
点个赞再走吧
#include<bits/stdc++.h>
using namespace std;
int f[10000005];
long long a,b,x,y,c;
int main(){
memset(f,0,sizeof(f));
cin>>a>>b>>x>>y>>c;
for(int k=a;k<=b;k++){
for(int i=1;i<k;i++){
for(int j=0;j<k;j++){
if(i!=j)
{
int k1=0;
int k2=0;
while(k1<=y){
if(k2%2==0){
k1=k1*k+i;
k2++;
}else{
k1=k1*k+j;
k2++;
}
if(k1>=x&&k1<=y)
f[k1]++;
}
}
}
}
}
for(int i=x;i<=y;++i)
if(f[i]==c)
cout<<i<<endl;
}