0

我需要找出大于或小于的数字1出现在数组中的次数。

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

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

这里大于或小于一的数字只出现一次

另一个例子,如果我有一个数组

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

这里大于或小于 1 的数字出现两次,即倒数第二个有 a1之后有 a0

再举一个例子

{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;
    }
}   

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

4

6 回答 6

2

在 foreach 循环中遍历数组,并针对 1 测试每个值。如果小于 1,则将 num_greater 增加 1,如果小于,则将 nun_less 增加 1。

于 2009-06-29T18:35:49.770 回答
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;
于 2009-06-29T18:55:29.297 回答
1

好的...简而言之,您想遍历此循环一次,找出您何时“介于 1 之间”,然后增加一个计数器。

还有一两个额外的技巧,不过……一个“技巧”是你应该特别注意跟踪你是否已经为特定的集合增加了或没有。如果您的系列是 {1, 3, 5, 1},您不想执行以下操作:

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

因为你最终会得到 2,而不是 1。所以跟踪你是否已经用布尔值递增了......称之为“haveIncremented”,你最终会得到如下一行:

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

然后,当然,当您开始一个新集合时,您需要确保将 haveIncremented 集合再次设置回 false。当您读入一个新的“1”并且现在准备开始一个新的“集合”时,就会发生这种情况。

我试图在编码、解释和帮助之间走一条细线。希望这会有所帮助,同时不会放弃整个农场。

祝你好运。

于 2009-06-29T19:07:50.943 回答
0

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

于 2009-06-29T18:37:31.687 回答
0

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

于 2009-06-29T18:41:54.860 回答
0

这可以被视为具有一系列输入的有限状态机问题......在迭代时跟踪您的状态,并根据数组的当前值更新您的状态。例如,其中一种状态可能负责增加有界元素计数器。如果您将其绘制在一张纸上,这应该很容易弄清楚……状态的圆圈,以及根据您看到的输入类型链接状态的箭头。

祝你好运!

于 2009-06-29T19:21:52.007 回答