#28023: 請問我這樣的寫法哪有誤?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
b557. 直角三角形 | From: [123.194.107.200] | 發表日期 : 2021-11-10 17:10

#include<stdio.h>

#include<string.h>

int main(){

    int T, N, num;

    int a[100] = {0};

    scanf("%d", &T);

    for(int i = 0; i < T; i++){

        scanf("%d", &N);

        memset(a, 0 , sizeof(a));//將a陣列值清除為0

        for(int j = 0; j < N; j++){

            scanf("%d", &num);

            a[num] = a[num] + 1;//數字與其為應的陣列位置個數加總

        }

        //氣泡排序法

        for(int i = 0; i < num-1; i++){

            for(int j = 0; j < num-1; j++){

                if(a[j] > a[j+1]){

                    int temp = a[j];

                    a[j] = a[j+1];

                    a[j+1] = temp;

                }

            }

        }

        //計算答案

        int count = 0;

        for(int i = 0; i < N-2; i++){

            for(int j = i+1; j < N-1; j++){

                for(int k = j+1; k < N; k++){

                    if(a[i]*a[i] + a[j]*a[j] == a[k]*a[k]){

                        count++;

                    }

                }

            }

        }

        printf("%d\n", count);

    }

}

 

誰能幫我看看這樣的寫法哪裡有錯?

 
#28026: Re:請問我這樣的寫法哪有誤?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
b557. 直角三角形 | From: [27.51.64.28] | 發表日期 : 2021-11-10 21:21

#include

#include

int main(){

    int T, N, num;

    int a[100] = {0};

    scanf("%d", &T);

    for(int i = 0; i < T; i++){

        scanf("%d", &N);

        memset(a, 0 , sizeof(a));//將a陣列值清除為0

        for(int j = 0; j < N; j++){

            scanf("%d", &num);

            a[num] = a[num] + 1;//數字與其為應的陣列位置個數加總

        }

        //氣泡排序法

        for(int i = 0; i < num-1; i++){

            for(int j = 0; j < num-1; j++){

                if(a[j] > a[j+1]){

                    int temp = a[j];

                    a[j] = a[j+1];

                    a[j+1] = temp;

                }

            }

        }

        //計算答案

        int count = 0;

        for(int i = 0; i < N-2; i++){

            for(int j = i+1; j < N-1; j++){

                for(int k = j+1; k < N; k++){

                    if(a[i]*a[i] + a[j]*a[j] == a[k]*a[k]){

                        count++;

                    }

                }

            }

        }

        printf("%d\n", count);

    }

}

 

誰能幫我看看這樣的寫法哪裡有錯?

嗯......

你仔細想想你的a陣列到底是什麼東西...

 
#28042: Re:請問我這樣的寫法哪有誤?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
b557. 直角三角形 | From: [110.26.42.246] | 發表日期 : 2021-11-11 19:19

#include

#include

int main(){

    int T, N, num;

    int a[100] = {0};

    scanf("%d", &T);

    for(int i = 0; i < T; i++){

        scanf("%d", &N);

        memset(a, 0 , sizeof(a));//將a陣列值清除為0

        for(int j = 0; j < N; j++){

            scanf("%d", &num);

            a[num] = a[num] + 1;//數字與其為應的陣列位置個數加總

        }

        //氣泡排序法

        for(int i = 0; i < num-1; i++){

            for(int j = 0; j < num-1; j++){

                if(a[j] > a[j+1]){

                    int temp = a[j];

                    a[j] = a[j+1];

                    a[j+1] = temp;

                }

            }

        }

        //計算答案

        int count = 0;

        for(int i = 0; i < N-2; i++){

            for(int j = i+1; j < N-1; j++){

                for(int k = j+1; k < N; k++){

                    if(a[i]*a[i] + a[j]*a[j] == a[k]*a[k]){

                        count++;

                    }

                }

            }

        }

        printf("%d\n", count);

    }

}

 

誰能幫我看看這樣的寫法哪裡有錯?

嗯......

你仔細想想你的a陣列到底是什麼東西...

我想過了,我的a陣列是放每個數字對應於該陣列位置的個數,所以如果直接做排序,會出現問題。

後來我把原先存入數字的一般變數,改為用"陣列"儲存,再修改變數名稱,就可以了。

#include<stdio.h>

#include<string.h>

int main(){

    int T, N, num[100] = {0};

    int a[100] = {0};

    scanf("%d", &T);

    for(int i = 0; i < T; i++){

        scanf("%d", &N);

        memset(a, 0 , sizeof(a));//將a陣列值清除為0

        for(int j = 0; j < N; j++){

            scanf("%d", &num[j]);

            a[num[j]] = a[num[j]] + 1;//數字與其對應的陣列位置個數加總

        }

        //氣泡排序法

        for(int i = 0; i < N-1; i++){

            for(int j = 0; j < N-1; j++){

                if(num[j] > num[j+1]){

                    int temp = num[j];

                    num[j] = num[j+1];

                    num[j+1] = temp;

                }

            }

        }

        //計算答案

        int count = 0;

        for(int i = 0; i < N-2; i++){

        if(a[num[i]] == 0)//將數字與其對應的陣列位置個數合為0跳過 

            continue;

            for(int j = i+1; j < N-1; j++){

            if(a[num[j]] == 0)//將數字與其對應的陣列位置個數合為0跳過

                continue;

                for(int k = j+1; k < N; k++){

                if(a[num[k]] == 0)//將數字與其對應的陣列位置個數合為0跳過

                    continue;

                    if(num[i]*num[i] + num[j]*num[j] == num[k]*num[k]){

                        count++;

                    }

                }

            }

        }

        printf("%d\n", count);

    }

}



 
ZeroJudge Forum