(本题取 $n=9$)
【思路】题目描述得有些模糊,要求我们找到两个十位数 $a,b$($a \lt b$),使得 $a$ 的十位数和 $b$ 的个位数相等,同时使得 $\dfrac{a}{b}$ 与 $a,b$ 分别删去相同位数之后的商相等。
由于有两个数位相等,因此我们只需要枚举三个数位,这样就可以在 $\mathcal O(n^3)$ 枚举出所有的情况。约分需要用到 $\gcd$,因此最终时间复杂度为 $\mathcal O(n^3 \log n)$:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | #include<stdio.h>struct fraction
 {
 int n,d;
 }ans;
 int gcd(int a,int b)
 {
 while(b)
 {
 int t=b;
 b=a%b;
 a=t;
 }
 return a;
 }
 int main()
 {
 ans.n=ans.d=1;
 for(int i=1;i<=9;++i)
 {
 for(int j=i+1;j<=9;++j)
 {
 for(int k=i+1;k<=9;++k)
 {
 int n=i*10+j,d=j*10+k;
 if(n*k==d*i)
 {
 ans.n*=n;
 ans.d*=d;
 }
 }
 }
 }
 printf("%d",ans.d/gcd(ans.n,ans.d));
 return 0;
 }
 
 |