洛谷 P1112 波浪数

  

题目描述

波浪数是在一对数字之间交替转换的数,如 121212112121211212121 ,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数 191919191919191919 是一个十进制下的波浪数,它对应的十一进制数 121212121212121212 也是一个波浪数,所以十进制数 191919191919191919 是一个双重波浪数。

类似的可以定义三重波浪数,三重波浪数在三种不同的进制中都是波浪数,甚至还有四重波浪数,如十进制 300=606300=606300=606 (七进制)= 363363363 (九进制)= 454454454 (八进制)= 1A11A11A1 (十三进制)…,你的任务就是在指定范围内找出双重、三重、四重波浪数。

输入输出格式

输入格式:

单独一行包含五个用空格隔开的十进制整数,前两个数表示进制的范围( 2−322-32232 ),第三与第四个数表示指定的范围( 1−100000001-10000000110000000 ),第五个数为 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
",i);
31     }
32     return 0;
33 }
原文地址:https://www.cnblogs.com/fantasquex/p/9342309.html