为什么循环中类似的实现,结果不同?见代码中注释
#include<bits/stdc++.h>
using namespace std;
int d[10000005];
int main(){
int a,b,l,r,k;
cin>>a>>b>>l>>r>>k;
for(int p=a; p<=b; p++) {
//枚举p进制下所有的波浪数
//i和j作为波浪数的2个值
for(int i=0; i<p; i++) {
for(int j=1; j<p; j++){
if(i != j) {
int s=i*p+j;//构造开始
//这样实现就ok
int t=0;
while(s<=r) {
if(s>=l) d[s]++;//符合要求,重数++
if(t%2==0) s=s*p+i;//在末尾加第一个数
else s=s*p+j;//加第二个数
t++;
}
//用这样的方式,就有3个数据会超时?
// while(s<=r) {
// if(s>=l and s<=r) d[s]++;//符合要求,重数++
// s=s*p+i;//在末尾加第一个数
// if(s>=l and s<=r) d[s]++;
// s=s*p+j;//加第二个数
// }
}
}
}
}
for(int i=l;i<=r;i++) //得出答案
if(d[i]==k) cout<<i<<endl;
return 0;
}