0

1配列に表示される数よりも多いまたは少ない数を調べる必要があります。

たとえば、配列がある場合:

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

ここでは、1より大きいまたは小さい数値が1回だけ表示されます

別の例、配列がある場合

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

ここでは、1より大きいまたは小さい数値が2回表示されます。つまり、最後から2番目にがあり1、その後にがあります。0

もう1つの例

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

ここでは、1より大きいまたは小さい数値が2回表示され、1つのセットは1{2,3}回、別のセットは{-18,26}2回表示されます。

これまでのところ、配列をループすることはできましたが、スタックしています..これを行う方法

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の間」になったことを確認して、カウンターをインクリメントします。

ただし、追加のトリックが1つか2つあります... 1つの「トリック」は、特定のセットに対してすでにインクリメントされているかどうかを追跡することに特別な注意を払う必要があるということです。シリーズが{1、3、5、1}の場合、次のようなことはしたくありません。

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

1ではなく2になるためです。したがって、ブール値ですでにインクリメントされているかどうかを追跡します...「haveIncremented」のように呼び出すと、次のような行になります。

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

次に、もちろん、新しいセットを開始するときに、haveIncrementedセットをfalseに戻すように設定する必要があります。これは、新しい「1」を読み込んで、新しい「セット」を開始する準備ができたときに発生します。

私はコーディングと説明と支援の間の微妙な境界線を歩こうとしています。うまくいけば、これは農場全体を提供するのではなく、役立つでしょう。

幸運を。

于 2009-06-29T19:07:50.943 に答える
0

2つの変数が必要です。1つはブール値であり、1または-1に等しくない一連の数値にいるかどうかを追跡するために使用されます。もう1つは整数であり、遭遇したシリーズの総数を追跡するために使用されます。

于 2009-06-29T18:37:31.687 に答える
0

これは、一連の入力を伴う有限状態マシンの問題と見なすことができます...反復するときに状態を追跡し、配列の現在の値に基づいて状態を更新します。たとえば、状態の 1 つが、境界要素カウンターをインクリメントする原因になっている可能性があります。これは、紙に図を描くと簡単に理解できるはずです... 円は状態を表し、矢印は表示される入力のタイプに基づいて状態をリンクしています。

幸運を!

于 2009-06-29T19:21:52.007 に答える
0

1 が前の値であったかどうかを判断するブール値と、ブール値が設定されているときに 1 が表示されない回数をカウントする整数が必要です。

于 2009-06-29T18:41:54.860 に答える