#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
void generateAnswer(int answer[]) {
bool used[10] = {false};
int count = 0;
while (count < 4) {
if (!used[digit]) {
used[digit] = true;
answer[count++] = digit;
}
}
}
bool isValidInput(char input[]) {
if (strlen(input
) != 4) return false;
bool used[10] = {false};
for (int i = 0; i < 4; i++) {
if (!isdigit(input
[i
])) return false; int digit = input[i] - '0';
if (used[digit]) return false;
used[digit] = true;
}
return true;
}
bool getGuess(int guess[]) {
char input[100];
if (scanf("%s", input
) == EOF
) { return false; // 輸入結束
}
if (!isValidInput(input)) {
return false; // 非法輸入
}
for (int i = 0; i < 4; i++) {
guess[i] = input[i] - '0';
}
return true;
}
void checkAB(int answer[], int guess[], int* A, int* B) {
*A = 0;
*B = 0;
for (int i = 0; i < 4; i++) {
if (guess[i] == answer[i]) {
(*A)++;
} else {
for (int j = 0; j < 4; j++) {
if (guess[i] == answer[j] && i != j) {
(*B)++;
break;
}
}
}
}
}
int main() {
int answer[4], guess[4];
int A = 0, B = 0;
int attempts = 0;
srand(20240408); // 固定 seed,讓評測系統有一致答案
generateAnswer(answer);
while (A != 4) {
if (!getGuess(guess)) {
break;
}
checkAB(answer, guess, &A, &B);
attempts++;
}
if (A == 4) {
printf("恭喜你猜對了!總共猜了 %d 次!\n", attempts
); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KCnZvaWQgZ2VuZXJhdGVBbnN3ZXIoaW50IGFuc3dlcltdKSB7CiAgICBib29sIHVzZWRbMTBdID0ge2ZhbHNlfTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAoY291bnQgPCA0KSB7CiAgICAgICAgaW50IGRpZ2l0ID0gcmFuZCgpICUgMTA7CiAgICAgICAgaWYgKCF1c2VkW2RpZ2l0XSkgewogICAgICAgICAgICB1c2VkW2RpZ2l0XSA9IHRydWU7CiAgICAgICAgICAgIGFuc3dlcltjb3VudCsrXSA9IGRpZ2l0OwogICAgICAgIH0KICAgIH0KfQoKYm9vbCBpc1ZhbGlkSW5wdXQoY2hhciBpbnB1dFtdKSB7CiAgICBpZiAoc3RybGVuKGlucHV0KSAhPSA0KSByZXR1cm4gZmFsc2U7CgogICAgYm9vbCB1c2VkWzEwXSA9IHtmYWxzZX07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgIGlmICghaXNkaWdpdChpbnB1dFtpXSkpIHJldHVybiBmYWxzZTsKICAgICAgICBpbnQgZGlnaXQgPSBpbnB1dFtpXSAtICcwJzsKICAgICAgICBpZiAodXNlZFtkaWdpdF0pIHJldHVybiBmYWxzZTsKICAgICAgICB1c2VkW2RpZ2l0XSA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBnZXRHdWVzcyhpbnQgZ3Vlc3NbXSkgewogICAgY2hhciBpbnB1dFsxMDBdOwoKICAgIGlmIChzY2FuZigiJXMiLCBpbnB1dCkgPT0gRU9GKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyDovLjlhaXntZDmnZ8KICAgIH0KCiAgICBpZiAoIWlzVmFsaWRJbnB1dChpbnB1dCkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7IC8vIOmdnuazlei8uOWFpQogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgZ3Vlc3NbaV0gPSBpbnB1dFtpXSAtICcwJzsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKfQoKdm9pZCBjaGVja0FCKGludCBhbnN3ZXJbXSwgaW50IGd1ZXNzW10sIGludCogQSwgaW50KiBCKSB7CiAgICAqQSA9IDA7CiAgICAqQiA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKICAgICAgICBpZiAoZ3Vlc3NbaV0gPT0gYW5zd2VyW2ldKSB7CiAgICAgICAgICAgICgqQSkrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgewogICAgICAgICAgICAgICAgaWYgKGd1ZXNzW2ldID09IGFuc3dlcltqXSAmJiBpICE9IGopIHsKICAgICAgICAgICAgICAgICAgICAoKkIpKys7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IGFuc3dlcls0XSwgZ3Vlc3NbNF07CiAgICBpbnQgQSA9IDAsIEIgPSAwOwogICAgaW50IGF0dGVtcHRzID0gMDsKCiAgICBzcmFuZCgyMDI0MDQwOCk7IC8vIOWbuuWumiBzZWVk77yM6K6T6KmV5ris57O757Wx5pyJ5LiA6Ie0562U5qGICgogICAgZ2VuZXJhdGVBbnN3ZXIoYW5zd2VyKTsKCiAgICB3aGlsZSAoQSAhPSA0KSB7CiAgICAgICAgaWYgKCFnZXRHdWVzcyhndWVzcykpIHsKICAgICAgICAgICAgcHJpbnRmKCLovLjlhaXpjK/oqqTmiJbovLjlhaXntZDmnZ/jgIJcbiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2hlY2tBQihhbnN3ZXIsIGd1ZXNzLCAmQSwgJkIpOwogICAgICAgIHByaW50ZigiJWRBJWRCXG4iLCBBLCBCKTsKICAgICAgICBhdHRlbXB0cysrOwogICAgfQoKICAgIGlmIChBID09IDQpIHsKICAgICAgICBwcmludGYoIuaBreWWnOS9oOeMnOWwjeS6hu+8gee4veWFseeMnOS6hiAlZCDmrKHvvIFcbiIsIGF0dGVtcHRzKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==