我們常用數字密碼鎖來保護重要的東西,但要是不小心忘了密碼麻煩就大了!
以四位數字的密碼鎖為例,我們最多要嘗試10^4=10000次才能解鎖。這時候要是
有辦法知道目前嘗試的密碼錯了幾個字,那解鎖的速度就快多了。請寫一個程式,
可以判斷每組數字跟正確答案差了幾個字。
輸入說明 :
多筆輸入。
第一行有四個介於0-9之間的數字,代表正確的密碼
第二行有一個整數n,1<=n<=10000,代表接下來嘗試n組密碼
接下來有n行,每行有四個介於0-9之間的數字,每行各代表一組嘗試的密碼。
輸出說明 :
輸出n行。
對於每組嘗試的密碼,若有p個數字的值正確,且在正確的位子上,
另外有q個數字的值正確,但不在正確的位子上,
輸出pAqB。
範例見測資。
範例輸入 :
1 2 3 4
4
1 1 4 5
1 2 4 3
1 1 4 4
4 3 2 1
1 1 1 5
4
1 1 1 1
0 9 2 8
1 5 2 3
1 1 5 1
範例輸出 :
1A1B
2A2B
2A0B
0A4B
3A0B
0A0B
1A1B
2A2B
程式碼 :
#include<stdio.h> int main() { int a,b,i,j,n,ans[4],input[4],check[4]; while(scanf("%d %d %d %d",&ans[0],&ans[1],&ans[2],&ans[3])==4) { scanf("%d",&n); while(n--) { a = b = 0; for(i=0; i<4; i++) { scanf("%d",&input[i]); if(ans[i] == input[i]) { a++; check[i] = 1; } else check[i] = 0; } for(i=0; i<4; i++) if(check[i] != 1) for(j=0; j<4; j++) if(check[j]==0 && (input[i] == ans[j]) && j!=i) { b++; check[j] = 2; break; } printf("%dA%dB\n",a,b); } } return 0; }
http://zerojudge.tw/ShowProblem?problemid=a291
可以講解一下嗎 感謝~
回覆刪除第11~21行 為判斷有幾個A,如果有A的話我用check[i]來記錄這一格是已經判斷過的,這樣再判斷B時才不會重複判斷。
刪除第22~30行 為判斷有幾個B,比較重要的是第25行,首先要判斷的數字不能是A或B(check[j]==0),且數字必須相同(input[i] == ans[j]),最重要的是位置要不一樣(j!=i)。
感謝您的回答,那想再請問一下,第一行是宣告變數和陣列嗎?
回覆刪除本人為初學者,不太熟悉陣列。而我是用code clock編譯
跑出執行檔後按照題目的方式輸入為何沒法輸出呢 是我的輸入方法錯了嗎?
感謝~
第一行 #include 是我們會用到系統些好的function,例如:scanf,printf等
刪除第四行 才是宣告變數與陣列
最後我不認識code clock,這是IDE嗎?
喔~我知道了 感謝
回覆刪除抱歉 筆誤 是Code Blocks
你的程式碼在DEVC++跑的答案是錯的耶,然後用你的加我的就對了ㄟ==
回覆刪除#include
#include
#include
/*對於每組嘗試的密碼,若有p個數字的值正確,且在正確的位子上,
另外有q個數字的值正確,但不在正確的位子上,輸出pAqB。*/
using namespace std;
int i,j,k,m,number,correct=0,the_same=0;
int code[4],check[4];
int main(){
i=0;
while(i<4){
cin>>code[i];i++;
}
cin>>number;
int test[number][4];
for(i=0;i>test[i][j];
}
}
for(i=0;i<number;i++){
for(j=0;j<4;j++){
if(test[i][j]==code[j]){
correct++;
check[j]=1;
}
else{
check[j]=0;
}
}
for(k=0;k<4;k++){
if(check[k]!=1){
for(m=0;m<4;m++){
if(check[m]==0 && (test[i][k]==code[m]) && k!=m){
the_same++;
check[m]=2;
/*如果code的位置已確認過有,則將此位置
去除不再比對(此動作是避免重複問題)*/
break;
}
}
}
}
cout<<correct<<"A"<<the_same<<"B"<<endl;
correct=0,the_same=0;
}
}
可以請問是錯在什麼樣的狀況?
刪除喔 就是答案不正確阿
回覆刪除