在代碼中的一些問題:
- 這條線:
if(digits[p] > digits[u]);
不要做你所期望的,我認爲,看到最後一個字符;
,這殺了if
聲明的建議。並且以下行不屬於if
塊。
sizeof(digits)
這個sizeof(digits)
返回數字的大小(以字節爲單位),如果數字的元素不是字節,那麼您將索引帶有出界索引的數組(with k
)。
- 我真的不明白搜索最後一個非重複數字,你在設置
lastnon
時digits[c] == digits[k]
,如果我正確理解了問題陳述,我認爲它不正確。
這裏是一個天真的做法:
#include <stdio.h>
int main() {
int p, u, firstnon = -1, lastnon = -1, digit_repeat;
int digits[10] = { 1, 2, 3, 1, 3, 5, 1, 2, 4, 3};
int digits_size = sizeof(digits)/sizeof(digits[0]);
for (p = 0; p < digits_size; p++) {
digit_repeat = 0;
for (u = 0; u < digits_size; u++) {
if (p != u && digits[p] == digits[u]) {
digit_repeat = 1;
break;
}
}
if (!digit_repeat) {
firstnon = p;
break;
}
}
if (firstnon != -1) {
printf("The first non-repeated digit is: %d", digits[firstnon]);
} else {
printf("There isn't any non-repeated digits");
}
printf("\n");
for (p = digits_size - 1; p >= 0; p--) {
digit_repeat = 0;
for (u = 0; u < digits_size; u++) {
if (p != u && digits[p] == digits[u]) {
digit_repeat = 1;
break;
}
}
if (!digit_repeat) {
lastnon = p;
break;
}
}
if (lastnon != -1) {
printf("The last non-repeated digit is: %d", digits[lastnon]);
} else {
printf("There isn't any non-repeated digits");
}
printf("\n");
return 0;
}
要找到第一個非重複的數字。
- 遍歷數字。
- 在每個數字中,檢查其他數字(全部)在另一個位置的相同數字。
- 如果還有另一個,繼續
- 如果只有一個,保存和中斷搜索。
這同樣適用於最後一個非重複數字,但迭代是相反的。
一些改進版本。
#include <stdio.h>
int main() {
int p;
int digits[10] = { 1, 2, 3, 1, 3, 5, 1, 2, 4, 3};
int digits_size = sizeof(digits)/sizeof(digits[0]);
int used_digits[10] = { 0 };
int used_digits_size = sizeof(used_digits)/sizeof(used_digits[0]);
for (p = 0; p < digits_size; p++) {
used_digits[digits[p]]++;
}
for (p = 0; p < used_digits_size; p++) {
if (used_digits[p] == 1) {
printf("The first non-repeated digit is: %d", p);
break;
}
}
if (p == used_digits_size) {
printf("There isn't any non-repeated digits");
}
printf("\n");
for (p = used_digits_size - 1; p >= 0; p--) {
if (used_digits[p] == 1) {
printf("The last non-repeated digit is: %d", p);
break;
}
}
if (p == -1) {
printf("There isn't any non-repeated digits");
}
printf("\n");
return 0;
}
該版本使用數組來存儲數字的使用。非重複數字是usage == 1
的數字。向前搜索並向後查找第一個和最後一個非重複數字。
你的意思是「不重複」是什麼意思?你可以添加一個例子嗎?例如。 「12321」中第一個不重複的數字是什麼?我可以想象「1」,因爲它不是立即重複,或「3」,因爲它是第一個數字只發生一次。 – Medo42 2014-08-28 13:06:29
「digits」的聲明和初始化是什麼?他們是字符還是數字? – 2014-08-28 13:13:15
僅在數組中找到一次的數字。在2,6,6,3,3,4的數組中將是第一個不重複的,並且4將是最後的 – mcliatt 2014-08-28 13:14:11