我需要找出大于或小于1
的数字在数组中出现的次数。
例如,如果我有一个数组:
{1,1,1,2,3,-18,45,1}
此处大于或小于1的数字只出现一次
另一个例子,如果我有一个数组
{1,1,1,2,3,-18,45,1,0}
此处大于或小于1的数字会出现两次,即倒数第二位的数字会出现1
,之后会出现0
又一个例子
{1,1,2,3,1,-18,26,1}
这里大于或小于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;
}
}
,因此两次。
到目前为止,我已经能够循环阵列,但我卡住了...如何做到这一点
{{1}}
怎么做才能有人帮助我?
答案 0 :(得分:2)
Iterate through the array和test each value against 1。如果它小于1,则将num_greater递增1,如果小于1,则将nun_less递增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;
答案 2 :(得分:1)
好吧......简而言之,你想迭代这个循环一次,弄清楚当你在“1”之间时,并增加一个计数器。
还有一两个额外的技巧,但是......一个“技巧”是你应该特别注意跟踪你是否已经增加了特定的一组。如果你的系列是{1,3,5,1},你不想做类似的事情:
1: don't increment
3: increment
5: increment // this is bad!
1: don't increment
因为你最终会得到2,而不是1.所以跟踪你是否已经用布尔值增加...称之为“hasIncremented”,你最终会得到一条像:
// if (haveIncremented is false)
// increment my counter
// set haveIncremented to true
然后,当然,您需要确保在启动新集时再次将hasIncremented设置为false。当您读入新的“1”时会发生这种情况,现在可以开始新的“设置”。
我正在努力在编码,解释和帮助之间走一条路。希望这有助于帮助整个农场。
祝你好运。答案 3 :(得分:0)
您需要两个变量。一个是布尔值,用于跟踪您是否在一系列不等于1或-1的数字中。另一个是整数,用于跟踪您遇到的系列总数。
答案 4 :(得分:0)
您需要一个布尔值来确定1是否是前一个值,还是一个整数来计算布尔值设置时没有看到1的次数。
答案 5 :(得分:0)
这可以看作是一个带有一系列输入的有限状态机问题...当你迭代时跟踪你的状态,并根据数组的当前值更新你的状态。例如,其中一个州可能负责增加有界元素计数器。如果你在一张纸上绘制图表,这应该很容易弄清楚......状态的圆圈,以及根据你看到的输入类型链接状态的箭头。
祝你好运!