#29941: 請問還有哪裡可以改進


105438a (fwwwww)

學校 : 國立成功大學
編號 : 175373
來源 : [42.73.75.40]
最後登入時間 :
2022-08-28 14:02:02
a291. nAnB problem | From: [140.116.130.209] | 發表日期 : 2022-04-14 16:21

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])

{

    int ans[4];

    int n;

    int num[4];

    int a,b;

    while(scanf("%d %d %d %d",&ans[0],&ans[1],&ans[2],&ans[3]))

    {

        scanf("%d",&n);

        for(int i=1;i<=n;i++)

        {

            bool check[4]={0};

            a=0;

            b=0;

            scanf("%d %d %d %d",&num[0],&num[1],&num[2],&num[3]);

            for(int i=0;i<4;i++)

                for(int j=0;j<4;j++)

                {

                    if(check[j]==1)

                        continue;

                    if(ans[i]==num[i])

                    {

                        a++;

                        check[i]=1;

                        break;

                    }

                    else if(ans[i]==num[j])

                    {

                        b++;

                        check[j]=1;

                        break;

                    }

                }

            printf("%dA%dB\n",a,b);

        }

    }

    return 0;

}

 
#29945: Re:請問還有哪裡可以改進


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a291. nAnB problem | From: [39.9.234.113] | 發表日期 : 2022-04-14 20:24

1.

    while(scanf("%d %d %d %d",&ans[0],&ans[1],&ans[2],&ans[3]))

2.

            for(int i=0;i<4;i++)

                for(int j=0;j<4;j++)

                {

                    if(check[j]==1)

                        continue;

                    if(ans[i]==num[i])

                    {

                        a++;

                        check[i]=1;

                        break;

                    }

                    else if(ans[i]==num[j])

                    {

                        b++;

                        check[j]=1;

                        break;

                    }

                }


1. 這樣會無限迴圈,改成while(scanf("%d %d %d %d",&ans[0],&ans[1],&ans[2],&ans[3])!=EOF)

2. 先檢查完A再檢查B,不然如果正確的密碼有重複的數字就會出問題

 
#29952: Re:請問還有哪裡可以改進


105438a (fwwwww)

學校 : 國立成功大學
編號 : 175373
來源 : [42.73.75.40]
最後登入時間 :
2022-08-28 14:02:02
a291. nAnB problem | From: [140.116.130.209] | 發表日期 : 2022-04-15 14:44

謝謝!我以為是我的程式碼太慢所以一直改進 我一開始就是先算A再算B,while(scanf("%d %d %d %d",&ans[0],&ans[1],&ans[2],&ans[3])!=EOF)不過我是第一次看到這種語法



 
ZeroJudge Forum