# Math# Pattern Recognition# Number Theory

a828 - 間隔數 ( number )

🔗 前往 ZeroJudge 原題

題目描述

題目要求輸出第 n 個符合特定規則的間隔數。間隔數的定義是:由恰好兩個相異的單位數字組成,每個單位數字為 0 到 9 中的一個整數,且該數所含的單位數字不會連續出現,且至少有一個單位數字出現兩次以上。

解題思路

觀察前幾個間隔數 (101, 121, 131, 141, 151),可以發現它們的結構是 1x1,其中 x 從 0 開始遞增。 題目要求輸出第 n 個間隔數,可以利用這個規律來計算。 程式碼中,a 代表輸入的 n。cl 計算需要打印的字符數,f 計算第一個數字,s 計算第二個數字。 程式碼的核心邏輯是根據輸入的 a 值,計算出對應的間隔數的數字,並按照 fs 交替打印的方式輸出結果。 對於 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");
	}
}

Discussion