在代码中的一些问题:
- 这条线:
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