不需要任何算法技巧,找规律题。
打表可以看到每30个数有18个是好数,且18个好数在每30个数的相对位置不变,那么答案易推。
其实30的规律挺好看出来,与3有关,与10有关,自然联想到30了。
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
int []a = new int [30];
int p=0;
for(int i=1;i<=30;i++){
if(i%3!=0 && i%10!=3) a[++p]=i;
}
while(t-->0){
long n = sc.nextLong();
long res=(n-1)/18*30;res += a[(int)((n-1)%18)+1];
System.out.println(res);
}
}
}