-5

答えは簡単だと思いますが、ここでは少し混乱しています。異なる数値に異なる値を追加したいのですが、これを簡単に実現するにはどうすればよいですか?

例:1 = 10、3 = 20、5 =30。ユーザーが数値4を入力すると、答えは60になります。2には特定の値がなかったため、10にする必要があります。数値2にも10が必要です。これは1の後にあり、新しい値を取得しないためです。値は番号3から20で変化し、それ以降、20になると、新しい値がより高い番号に割り当てられるまで、すべての番号の値が変化します。次に、値がまだ変更されていないため、4番は再び20にする必要があり、5番は50の値を取得する必要があります。

もう一つの例:

    Numers entered by user: 10

    Values:
    1 = 10
    5 = 20
    8 = 30

    In this case, the values of all the 10 numbers should be:
    1 = 10
    2 = 10
    3 = 10
    4 = 10
    5 = 20
    6 = 20
    7 = 20
    8 = 20
    9 = 30
    10 = 30

したがって、答えは次のようになります。180(すべての組み合わせ値)。

4

3 に答える 3

3

Dictionary<int, int>これに使用できると思いますのでkey、ユーザー入力、value-関連する「応答」になります。

IDictionary<int, int> map = new Dictionary<int, int>();
map.Add(1, 10);
map.Add(3, 20);


public int GetResponseForUserInput(int input)
{
   int response = -1;
   if (map.ContainsKey(input))
   {
      response = map[input];
   }

   return response;
}
于 2012-12-27T11:06:34.507 に答える
1

サンプルにはトリッキーなエラーが含まれています。 8 = 20実際 8 = 30の答えは、190

以下は、サンプルに基づいて合計を計算するためのコードです。それが役に立てば幸い

// Following lines should be replaced with actual input method
int TotalNumber = 10;
List<Tuple<int, int>> CheckPoints = new List<Tuple<int, int>>();

CheckPoints.Add(Tuple.Create(1, 10));
CheckPoints.Add(Tuple.Create(5, 20));
CheckPoints.Add(Tuple.Create(8, 30));


int NumberTillCount = 10;//determines point till which calculation should proceed

int result = 0;
Tuple<int, int> CurrentCheckPoint = new Tuple<int,int>(0,0);

//Loop checks if new CheckPoint is encountered and writes it in temp variable 'CurrentCheckPoint'
for (int i = 1; i <= NumberTillCount; i++)
{
    CurrentCheckPoint = CheckPoints.FindIndex(x=>x.Item1 == i) != -1 ? CheckPoints.Find(x=>x.Item1 == i) : CurrentCheckPoint;
    result += CurrentCheckPoint.Item2;
}
于 2012-12-27T13:22:51.660 に答える
0

あなたができる最も簡単なことは、おそらく次のようなスイッチ構造を持つメソッドを実装することです。

public int getNumber(int inputNr)
{
    var returnNr = 1;

    switch (inputNr)
    {
        case 1:
            returnNr = 10;
            break;
        case 3:
            returnNr = 30;
            break;
        case 4:
            returnNr = 60;
            break;
        default:
            // Probably not needed, as default returnNr is 1.
            break;
    }

    return returnNr;
}

編集:考え直してみると、これはさらに簡単です:

// Place the values in positions according to when you want them as results:
int[] numbers = {1, 10, 1, 30, 60};  

public int getNumber(int inputNr){
    return numbers.GetValue(inputNr); // Return the value at position "inputNr".
}
于 2012-12-27T11:14:23.643 に答える