我正在寻找漂亮而干净的方法来查看数组中是否有三个相等的数字。
现在我有了这个:
for (int i = 0; i < nr ; i++)
{
if(a[i] == 1){one++;}
else if(a[i] == 2){two++;}
else if(a[i] == 3){three++;}
else if(a[i] == 4){four++;}
else if(a[i] == 5){five++;}
else if(a[i] == 6){six++;}
}
if(one >= 3){
printf("Tre tal finns i ettor, 3p\n");
}else if(two >= 3){
printf("Tre tal finns i tvår, 6p\n");
}else if(three >= 3){
printf("Tre tal finns i treor, 9p\n");
}else if(four >= 3){
printf("Tre tal finns i fyror, 12p\n");
}else if(five >= 3){
printf("Tre tal finns i femmor, 15p\n");
}else if(six >= 3){
printf("Tre tal finns i sexor, 18p\n");
}
其中(整数)是5个元素的数组(包含元素1-6),“nr”是跟踪数组长度的变量。
如果有人有更好的方法,请回复。
答案 0 :(得分:6)
将其概括为histogram,基本上是counting sort的第一步:
int histogram[n]; //variable length array are fine in c99, if using older c - malloc
for (int i = 0; i < n; i++) histogram[i] = 0; //init
for (i = 0; i < nr; i++)
histogram[a[i]]++;
for (i = 0; i < n; i++)
if (histogram[i] >= 3) //found it
//....
答案 1 :(得分:3)
我想将switch-case用作:
switch((a[i]){
case 1: one++;
break;
case 2: two++;
break;
case 3: three++;
break;
case 4: four++;
break;
case 5: five++;
break;
case 6: six++;
break;
//default: if you want to add
}
答案 2 :(得分:0)
他们是否彼此相邻?那么你只需要一个标志var。
事实上,如果你不关心你,如果你不仅仅重复一次,但只知道它们存在,那就更好了。
答案 3 :(得分:0)
如果你想要一个真正通用的解决方案,那么对输入数组进行排序;一旦排序,找到一个数字出现超过 n 次的所有实例,无论你想要什么 n ,都会变得微不足道。
如果您想要更有限的域名或更有针对性的解决方案,那么其他人已经给了您一些好的提示。