這就是問題:
莉莉正在她的學校組織一場比賽。一個房間大小的 N × N 有 N × N 人,每個人都屬于一個團隊。團隊編號在 1 到 N 之間。在房間里,人們穿著一件帶有 0 到 N 之間數字的襯衫,表示他們來自的團隊編號。穿0號的人是旁觀者。
Lili 想知道每個團隊是否由至少 N 個成員組成并且在房間內。幫助莉莉數一數房間里有多少不完整的團隊。
輸入:輸入由一個整數 N 組成,即參加本次比賽的球隊數量,后跟 N 行,由 N 個整數 Aij 組成,其值在 0 和 N 之間,每行代表人們襯衫上的數字。
約束:
1≤N≤100
輸出:
輸出房間中未完成團隊的數量。
樣本輸入 1:
2
1 0
2 2
輸出 1:
1
樣本輸入 2:
3
3 0 2
2 0 2
1 3 3
輸出 2:
1
這是我當前的代碼,但它一直說錯誤的答案
#include <stdio.h>
int main() {
int n, array[101][101], i, j, count = 0, k, x = 0;
scanf("%d", &n);
for (i = 0; i < n; i ) {
for (j = 0; j < n; j ) {
scanf("%d", &array[i][j]);
}
}
for (k = 0; k < n; k ) {
for (i = 0; i < n; i ) {
for (j = 0; j < n; j ) {
if (array[i][j] == k 1) {
count = 1;
}
}
}
if (count != n) {
x = 1;
}
count = 0;
}
printf("%d\n", x);
return 0;
}
uj5u.com熱心網友回復:
首先,您不需要一個大小為 NxN 的二維陣列,而是一個大小為 N(或只是 N-1)的一維陣列來計算每個團隊中有多少人。
由于您需要一個動態大小的陣列(N 僅在運行時知道),您可以簡單地使用分配的整數陣列。因為我敢打賭,當 N > 101 時,你的問題就來了……
偽代碼中的演算法:
read N
alloc an array teams of size N-1 and initialize it with 0
loop N * N times
| read a shirt number i
| if i > 0
| | increase teams[i - 1]
let incomplete be a 0 value integer
loop N-1 times
| if teams[i] < N
| | increase incomplete
output incomplete
uj5u.com熱心網友回復:
乍一看,您的解決方案似乎是正確的,但有兩個缺陷:
count != n運算式應該是count < n可能太慢了。@Serge Ballesta 解決方案是
O(N^2),但你的解決方案是O(N^3)
101x101 陣列足夠大,您甚至可以改用 100x100 陣列。您還可以使用 malloc 分配 NxN 陣列,這將使您的代碼更靈活但也更復雜一些。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523642.html
標籤:C
上一篇:c中簡單二維陣列的意外輸出
