e612 - 13178 - Is it multiple of 3?
題目描述
題目要求判斷由連接 1 到 n 的所有數字組成的大數是否能被 3 整除。例如,如果 n = 2,則大數為 12;如果 n = 6,則大數為 123456。
解題思路
根據 3 的整除規則,一個數能被 3 整除,當且僅當其各位數字之和能被 3 整除。因此,我們只需要計算 1 到 n 的所有數字的各位數字之和,然後判斷這個和是否能被 3 整除。
更簡化的方法是,一個數除以 3 的餘數等於其各位數字之和除以 3 的餘數。因此,我們可以計算 1 到 n 的每個數字除以 3 的餘數之和,然後判斷這個和除以 3 的餘數是否為 0。
觀察到,如果 n 除以 3 的餘數是 1,那麼連接起來的數字除以 3 的餘數是 1。如果 n 除以 3 的餘數是 2,那麼連接起來的數字除以 3 的餘數是 2。如果 n 除以 3 的餘數是 0,那麼連接起來的數字除以 3 的餘數是 0。
然而,題目要求輸出 "YES" 如果大數能被 3 整除,否則輸出 "NO"。根據題目描述,如果 n 是 1,則生成的數字是 1,不能被 3 整除,輸出 "NO"。如果 n 是 2,則生成的數字是 12,能被 3 整除,輸出 "YES"。如果 n 是 3,則生成的數字是 123,能被 3 整除,輸出 "YES"。
更精確的觀察是,如果 (n - 1) 能被 3 整除,則輸出 "NO",否則輸出 "YES"。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
while(scanf("%d",&a)>0){
if((a-1)%3==0)
printf("NO\n");
else printf("YES\n");
}
printf("\n");
}