a828 - 間隔數 ( number )
題目描述
題目要求輸出第 n 個符合特定規則的間隔數。間隔數的定義是:由恰好兩個相異的單位數字組成,每個單位數字為 0 到 9 中的一個整數,且該數所含的單位數字不會連續出現,且至少有一個單位數字出現兩次以上。
解題思路
觀察前幾個間隔數 (101, 121, 131, 141, 151),可以發現它們的結構是 1x1,其中 x 從 0 開始遞增。 題目要求輸出第 n 個間隔數,可以利用這個規律來計算。
程式碼中,a 代表輸入的 n。cl 計算需要打印的字符數,f 計算第一個數字,s 計算第二個數字。
程式碼的核心邏輯是根據輸入的 a 值,計算出對應的間隔數的數字,並按照 f 和 s 交替打印的方式輸出結果。
對於 a%81==0 的情況,需要特殊處理,因為 s 會是 0,導致輸出不正確。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <stdio.h>
int main(){
int a,cl,f,s;
while(scanf("%d",&a)>0){
cl=a/81+3;
f=((a-1)%81)/9+1;
s=(a%81)%9;
if(s==0)s=9;
if(s<=f)s--;
if(a%81==0){
f=9;
s=8;
cl--;
}
while(1){
printf("%d",f);
cl--;
if(cl==0)break;
printf("%d",s);
cl--;
if(cl==0)break;
}
printf("\n");
}
}