#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);
}
}
誰能幫我看看這樣的寫法哪裡有錯?
#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陣列到底是什麼東西...
#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);
}
}