想了很久,看完討論區好像沒有這line9008的問題,把討論區的一些參考測資也試了也沒錯,故來詢問各位。
錯的是Line:9008
正確1A1B
我的1A2B
以下是我的想法
數字相同的前提,若位置不同i!=j則將k=1,若位置相同i==j則k=2且馬上break。最後根據k的值決定A還是B。如此會優先取A而非B。
看其他人是將判斷過的位置記錄下來。而我的想法是將答案跟輸入的index即i跟j反過來再測一次,之後再取A跟B值較小的那一方。因為我認為只是再找兩個數字之間的關係,誰是答案誰是輸入不重要。
而反過來是為了解決下面這種問題。
密碼1 1 1 5
輸入1 5 2 3
如果將上面當作答案會測出1A3B,如果將下面當作答案會測出1A1B,之後A取小的B也取小的就可以了。
我懷疑是我的cin處理的怪怪的。還請各位幫忙看看感謝。
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
string num;
char c[4];
char d[4];
while(cin>>c[0]>>c[1]>>c[2]>>c[3])
{
num="";
for(int i=0;i<4;i++)num = num+c[i];
int time;
cin>>time;
while(time--)
{
int a1=0,b1=0,a2=0,b2=0,a=0,b=0;
short k=0;
string ans="";
cin>>d[0]>>d[1]>>d[2]>>d[3];
for(int i=0;i<4;i++)ans = ans+d[i];
for(int i=0;i<4;i++)
{
k=0;
for(int j=0;j<4;j++)
{
if(num[i] ==ans[j]&& i!=j)k=1;
else if(num[i]==ans[j] &&i==j)
{
k=2;
break;
}
}
if(k==1)b1++;
else if(k==2)a1++;
}
for(int i=0;i<4;i++)
{
k=0;
for(int j=0;j<4;j++)
{
if(num[j] ==ans[i]&& i!=j)k=1;
else if(num[j]==ans[i] &&i==j)
{
k=2;
break;
}
}
if(k==1)b2++;
else if(k==2)a2++;
}
a=(a1>a2)?a2:a1;
b=(b1>b2)?b2:b1;
cout<<a<<'A'<<b<<'B'<<'\n';
}
}
}
試試這個 正確是0A3B 你的是0A4B
1 2 3 2
2 3 1 1