0

のユーザー入力に従って、範囲番号 (例: 1-10) を作成したいC#。私はaspテキストボックス、ボタンを持っています。ユーザーはテキスト ボックスに 10,000 未満の数値を入力できます。ユーザーがボタンをクリックすると、ユーザーは入力値の範囲を取得します。

例-ユーザーが"35"テキストボックスに入力すると、 "Number Range: (31-40)".

しかし、範囲を作るにはいくつかの特別な条件があります-

- の間の数字を入力する場合

a) 1 ~ 50 範囲の長さは 10 です。たとえば、入力する数値は -49で、範囲は(41-50)です。

b) 51 ~ 100 範囲の長さは 25 です。たとえば、数値を入力すると78、範囲は になり(76-100)ます。

c) 101 から 200 範囲の長さは 50 です。たとえば、数値を入力すると135、範囲は になり(101-150)ます。

d) 201 ~ 400 範囲の長さは 100 です。たとえば、数値を入力すると245、範囲は になり(201-300)ます。

等々........

私はこれを使用Switch Caseしましたが、この機能を得るために正しいロジックを作成することに成功しませんでした。

助けてくれてありがとう...助けていただければ幸いです。

4

5 に答える 5

1

簡単な方法の 1 つは、次のように if と else-if を使用することです。

if(number < 0)
{
// number below zero
}
else if(number < 10)
{
// range 0 - 9
}
else if(number < 40)
{
// range 10 - 39
}
else if(number < 200)
{
// range 40 - 199
}
else if(number < 1000)
{
// range 200 - 999
}
else
{
// range 1000 -
}
于 2013-08-06T14:54:41.490 に答える
1

これを試してみてください。if/else/switch なしで動作します。古き良き数学だけです。

int x = yourNumber;
int maxRange = 50;
while (x > maxRange) maxRange *= 2;
int range = maxRange / 4 / 5 * 5;
int begin = ((x-1) / range * range) + 1;
int end = begin + range - 1;

beginそしてendあなたの範囲の始まりと終わりです。残りは自分でできると思います。

于 2013-08-06T15:15:36.383 に答える
0

最初の質問から、結果が文字列、数値の配列、またはその他のものであるかどうかが明確ではないため、これを行う方法の例を次に示します。

class Program {
    static void Main(string[] args) {
        int[] numbers = { 49, 78, 135, 245, 0, 1, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400};

        foreach(var number in numbers) {
            string result = GetRange(number);
            Console.WriteLine(string.Format("Input: {0}\tResult: {1}",number, result));
        }

        Console.ReadKey();
    }

    private static string GetRange(int number) {
        if(number <= 50) {
            return RangeByQuotient(number, 10);
        } else if(number <= 100) {
            return RangeByQuotient(number, 25);
        } else if(number <= 200) {
            return RangeByQuotient(number, 50);
        } else if(number <= 400) {
            return RangeByQuotient(number, 100);
        }

        return "Invalid Range";
    }
    private static string RangeByQuotient(int number, int quotient) {
        var lower = ((number-1) / quotient) * quotient + 1;
        var upper = (((number-1) / quotient)+1) * quotient;

        return string.Format("({0}-{1})", lower, upper);
    }
}

結果は

Input: 49       Result: (41-50)
Input: 78       Result: (76-100)
Input: 135      Result: (101-150)
Input: 245      Result: (201-300)
Input: 0        Result: (1-10)
Input: 1        Result: (1-10)
Input: 50       Result: (41-50)
Input: 51       Result: (51-75)
Input: 100      Result: (76-100)
Input: 101      Result: (101-150)
Input: 150      Result: (101-150)
Input: 151      Result: (151-200)
Input: 200      Result: (151-200)
Input: 201      Result: (201-300)
Input: 300      Result: (201-300)
Input: 301      Result: (301-400)
Input: 400      Result: (301-400)

更新: 50、51 などのボーダー ケースを正しく処理するように更新されました。

于 2013-08-06T15:19:20.177 に答える
0

これがあなたが探しているものだと思いますEnumerable.Range

int num = 35;    
if (num <= 50)
{
    int divisor = 10;
    int quotient = num / divisor;
    var result = Enumerable.Range((quotient * divisor) + 1, divisor).ToArray();
}
else if (num <= 100 )
{
    //I assume you can expand yourself
}
于 2013-08-06T14:59:51.130 に答える
0

特殊化されているのは 101 未満の数値のみだと思います。それ以外の場合は、特定の式を満たすようです。考えられる解決策の 1 つは、次のようなものです。

public static int[] GetRagneOf(int value) {
    var x=value>0?(value-1)/50:0;

    var power=Math.Log(x, 2);
    var count=25*(int)Math.Pow(2, power);
    var start=1+25*(int)Math.Pow(2, 1+power);

    if(value<101) {
        if(value<76) {
            if(value<51) {
                count=10;
                start=1+value-(value%10);
            }
        }
        else {
            start+=count;
        }
    }

    return Enumerable.Range(start, count).ToArray();
}
于 2013-08-06T14:52:15.913 に答える