2017-01-09 6 views
2

ご質問が混乱する場合は、私は2つの必要なシナリオを持っています。5と2を含むすべての数字を取得する必要があります。入力は開始番号と終了番号、 C#でこれを行う方法を数字xと数字yのみを含むすべての数字を取得

Input - starting number - 1 end number -30 
Output - 2,5,22,25. 

例えばだけ桁5桁と2

が含まれています。この二つの数字の間で数?

EDIT ::何人かの仲間のユーザーが私が試したことを尋ねたので、以下は試したサンプルスニペットですが、正しい方法ではないと感じています。これは、再帰と数学を使用して

public static void main() 
{ 
    int start = 1 
    int end = 30 

    for(int i = start; i<=end; i++) 
    { 
     if(CheckNumber(i)) 
     { 
      Console.WriteLine(i); 
     } 

    } 
} 

static bool CheckNumber(int num) 
{ 
    int rem = 0; 
    while(num != 0) 
    { 
     rem = num % 10; 
     if(rem != 2 || rem!=5) 
      return false; 
     num = num/10; 
    } 
    return true; 
} 
+4

は、あなたがこれまで何を試してみましたか? – Yousaf

+0

あなたはループを必要とし、数字を文字列にする方法と文字列の数字を探す方法 – pm100

+2

ループを必要とせず、文字列を使う必要もありません(再帰を考える)。 –

答えて

4

コストがかかるようになります。

void FiveTwo(int a, int b, int base) { 
    int n = base*10; // Number with all 2's & 5's and a 0 on the end 
    if (n+2<=b) { 
     FiveTwo(a,b,n+2); // Find numbers bigger than n+2 
     if (a<=n+2) 
      Console.WriteLine(n+2); // Not too small to print 
    }  
    if (n+5<=b) { 
     FiveTwo(a,b,n+5); // Find numbers bigger than n+5 
     if (a<=n+5) 
      Console.WriteLine(n+5); // Not too small to print 
    } 
} 

ので、同じようにそれを呼び出します。

FiveTwo(low, high, 0); 
+0

これは非常に良い解決策に見えます、ありがとう.. –

1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text.RegularExpressions; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main() 
     { 
      IEnumerable<int> numbers = Enumerable.Range(1, 30); 

      foreach (int n in numbers) 
      { 
       var m = Regex.Match(n.ToString(), "^[25]+$"); 

       if (m.Success) 
        Console.WriteLine(n); 
      }; 

      Console.ReadKey(); 
     } 
    } 
} 
+0

それは大きな範囲のかなりポケになるだろう。 –

+0

多分 - 私はばかです。しかし、私はもっと良くなるよう努力します。 –

0
private void myFunc() 
    { 
     List<int> Result = new List<int>(); 

     for (int i = 0; i <= 30; i++) 

     { 
       if (IsMyResult(i.ToString()) == true) 
        Result.Add(i); 
     } 
    } 

    private bool IsMyResult(string x) 
    { 
     string[] numbersToSearch = { "2", "5" }; // you can add here all the numbers you want to be inside the number you are searching 

     foreach (char digit in x) 
     { 
      if (numbersToSearch.Contains(digit.ToString())) 
      { 
       // do nothing it containes desired digit 
      } 
      else 
      { 
       // return false its not the result 
       return false; 
      } 
     } 

     // if code reach here it must be true 
     return true; 
    } 
0

私はを返し発電を実装することをお勧め;

// In order to avoid int.MaxValue, long.MaxValue borders let's return strings 
private static IEnumerable<string> Generator(params int[] digits) { 
    var vals = digits 
    .Distinct() 
    .OrderBy(x => x) 
    .Select(x => x.ToString()) 
    .ToArray(); 

    Queue<string> agenda = new Queue<string>(vals); 

    while (true) { 
    string value = agenda.Dequeue(); 

    yield return value; 

    foreach (var v in vals) 
     agenda.Enqueue(value + v); 
    } 
} 

テスト:あなたは簡単にのLINQの助けを借りて任意クエリを作成することができます

// First 15 numbers contain 2 and 5 only 
string report1 = string.Join(", ", Generator(2, 5).Take(15)); 

Console.WriteLine(report1); 

// Numbers contain 2 and 5 only less than 30 
string report2 = string.Join(", ", Generator(2, 5).TakeWhile(c => int.Parse(c) <= 30)); 

Console.WriteLine(report2); 

// Numbers contain 2 and 5 only between 100 and 1000 
string report3 = string.Join(", ", Generator(2, 5) 
    .SkipWhile(c => int.Parse(c) < 100) 
    .TakeWhile(c => int.Parse(c) < 1000)); 

Console.WriteLine(report3); 

出力:

2, 5, 22, 25, 52, 55, 222, 225, 252, 255, 522, 525, 552, 555, 2222 

2, 5, 22, 25 

222, 225, 252, 255, 522, 525, 552, 555 
関連する問題