#include void align(char[]); int is_aho(char[]); void increment(char[]); int neq(char[], char[]); void print(char[]); char a[11], b[11]; // 10桁 + 終端文字 int main(void) { scanf("%s %s", a, b); align(a); align(b); increment(b); while( neq(a, b) ) { if( is_aho(a) ) { print(a); } increment(a); } return 0; } void align(char s[]) { // 繰り上がりがだるいので0詰めして右揃え int i = 0; while(s[i] != '\0') { i++; } int j; for(j = 10; 0 <= j; j--, i--) { // '\0' もコピー s[j] = i < 0 ? '0' : s[i]; } return; } int is_aho(char s[]) { int i, sum = 0; for(i = 0; i < 10; i++) { if(s[i] == '3') { return 1; } sum += s[i] - '0'; } return sum % 3 == 0; } void increment(char s[]) { int i = 9; while(s[i] == '9') { s[i] = '0'; i--; } s[i]++; return; } int neq(char s[], char t[]) { int i; for(i = 0; i < 10; i++) { if(s[i] != t[i]) { return 1; } } return 0; } void print(char s[]) { // 0詰めしちゃったせいでそのまま表示できないのだ…… int i = 0; while(s[i] == '0') { i++; } printf("%s\n", a + i); return; }