2009-06-29 75 views
0

我需要找出大于或小于1的数字出现在数组中的次数。在数组中查找高于或低于1的重复数

例如,如果我有一个数组:

{1,1,1,2,3,-18,45,1} 

这里号码是大于或小于一出现只是一次

又如,如果我有一个数组

{1,1,1,2,3,-18,45,1,0} 

这里的数字大于或小于1会出现两次,即在倒数第二位有一个1,之后有一个0

再举一个例子

{1,1,2,3,1,-18,26,1} 

这里号码是大于或小于一出现两次,一组是{2,3}这就是一次,而另一组是{-18,26}所以这就是两次。

到目前为止,我一直能够循环数组,但即时通讯卡。如何做到这一点

class Program 
{ 
    static void Main(string[] args) 
    { 
     System.Console.WriteLine(isOneBalanced(new int[] { 1, 1, 1, 2, -18, 45, 1 })); 
    } 

    static int isOneBalanced(int[] a) 
    { 
     foreach(int a1 in a) 
     { 

     } 
     return 0; 
    } 
} 

如何做到这一点任何人可以帮助我吗?

+0

你能改写这个“如果我有一个数组{1,1,1,2,3-,-18,45,1}这里是大于或小于数比一个只出现一次”我不知道你在讲些什么。 – 2009-06-29 18:41:42

+0

我的意思是,1之间的数字组只出现一次,即如果数组是{1,1,2,3,1,4,5,1},则{2,3}和{4, 5}出现在1之间,那么它应该计为两次 – jarus 2009-06-29 18:55:16

+0

基本上,你需要计算数组中每个项不是1的序列数。这是正确的吗?如果是这样,艾伦的答案是正确的(至少当他删除提到-1,正如我所指出的)。 – 2009-06-29 18:58:23

回答

1

好的......简而言之,您希望遍历此循环一次,找出当您处于“1之间”时,并增加计数器。

有额外的或两个窍门,但...一个“绝招”是,你应该特别注意保持跟踪你是否已经增加了一组特定的或没有。如果你的系列{1,3,5,1},你不想做这样的事情:

1: don't increment 
3: increment 
5: increment  // this is bad! 
1: don't increment 

,因为你将有2结束了,而不是1所以,保持你是否跟踪“VE已经用布尔递增......把它像‘haveIncremented’,你会用这样一行结束了:

// if (haveIncremented is false) 
    // increment my counter 
    // set haveIncremented to true 

然后,当然,你需要确保你当你开始一个新的集合时,将hasIncremented设置为false。这会在您阅读新的“1”时发生,并且现在准备开始新的“设置”。

我试图在编码和解释和帮助之间走好一段路。希望这会帮助,而不是放弃整个农场。

祝你好运。

0

您需要两个变量。一个是布尔值,用于跟踪您是否处于一系列不等于1或-1的数字。另一个是整数,用于跟踪遇到的系列总数。

0

您需要一个布尔值来确定1是否是前一个值,并且需要一个整数来计算在设置布尔值时看不到1的次数。

2
/* Create variables to be used throughout 
    the process */ 
int counter = 0; 
bool newgroup = true; 

/* For each array entry: this loop will 
    cycle through our array, accessing one 
    item at a time and refer to it as 'a1' */ 
foreach(int a1 in a) 
{ 
    /* If 'a1' (our current array entry) is 
    absolutely equal to 1, set the value 
    of our boolean variable to true */ 
    if(a1 == 1) 
    newgroup = true; 
    else 
    { 
    /* Else (meaning, a1 isn't equal to 1), 
     if our variable 'newgroup' is true 
     increment our counter variable by 1 
     and set our boolean variable to false */ 
    if(newgroup) 
    { 
     counter++;  
     newgroup = false; 
    } 
    } 
}  
return counter; 
0

这可以被看作是一个有限状态机问题的输入序列...跟踪你的状态,当你遍历和基于阵列的当前值更新您的状态。例如,其中一个州可能负责增加您的有界元素计数器。如果您在一张纸上绘制图表,应该很容易弄清楚......为状态画圆圈,以及根据您看到的输入类型链接状态的箭头。

祝你好运!