不需要任何算法技巧,找规律题。

打表可以看到每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);
        }
    }
}