2014-01-05 3 views
-1

Допустим, у меня есть число, которое мне нужно разбить в массиве 40, а также сохранить оставшееся. Например:C# Как разделить число на равную константу?

int Num = 140; 
Wanted: 40, 40, 40, 20 

int Num = 75; 
Wanted: 40, 35 

Самый элегантный способ для достижения этой цели?

Спасибо!

+5

звучит немного как домашнее задание ... Что вы пробовали до сих пор? Подсказка: вы хотите посмотреть на оператор модуля (%) – JaredPar

+0

Heya Jared, До сих пор я вычислил цикл for: for (int i = 0; i user1307346

+0

позволяет делать это без десятичных знаков. Вы можете легко рассчитать остаток с ним. Как только остаток известен, вы можете сделать вычитание, чтобы получить значение, которое отлично делится на делитель. Эти 2 значения дают вам все, что вам нужно, чтобы ответить на этот вопрос – JaredPar

ответ

1

Попробуйте эту функцию

List<int> split(int num, int splitBy) 
{ 
    List<int> r = new List<int>(); 
    int v = Convert.ToInt32(num/splitBy); 
    r.AddRange(Enumerable.Repeat(splitBy, v).ToArray()); 
    var remaining = num % splitBy; 
    if (remaining != 0) 
     r.Add(remaining); 
    return r; 
} 
2

Подсказка: использовать модуль и деление.

140/40 ->3
140 % 40 ->20

Таким образом, вы бы число делится на 40, и есть, что многие 40 s в вашем массиве. Затем добавьте номер mod 40 в свой массив.

псевдокод:

int[] result = new int[number/140] + 1 
fill up the array with (number/140) 40's with a for loop 
set the last element to number % 140 
0

Используйте % Operator, он найдет свой "остаток". Я покажу вам ваш пример 75, но поскольку это очень похоже на домашнее задание, я оставлю его вам, чтобы выяснить версию 140.

int num = 75; 

//numberOfEvens contains 1 
int numberOfEvens = num/40; 
//remainder contains 35; 
int remainder = num % 40; 
0

Попробуйте этот код. Он должен делать то, что вы хотите. Но попытайтесь понять это, конечно, иначе это бесполезно.

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

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] r1 = Split(140, 30); 
      Print(r1); 

      int[] r2 = Split(140, 40); 
      Print(r2); 

      int[] r3 = Split(75, 40); 
      Print(r3); 
     } 

     public static void Print(int[] arr) 
     { 
      for (int i = 0; i < arr.Length; i++) 
      { 
       Console.Write(arr[i] + " "); 
      } 
      Console.WriteLine(); 
     } 

     public static int[] Split(int N, int val) 
     { 
      List<int> lst = new List<int>(); 
      int M = N; 
      int v = 0; 
      while (M > 0) 
      { 
       v = M > val ? val : M; 
       lst.Add(v); 
       M -= v; 
      } 
      return lst.ToArray(); 
     } 
    } 
} 
0

Мои extension-method с помощью LINQ:

public static class NumSplit 
{ 
    public static int[] NumSplit(this int iNum, int div) 
    { 
     var CountInts = Enumerable.Repeat(div, iNum/div); 
     var leftover = iNum % div; 

     return leftover > 0 ? CountInts.Concat(new int[] { leftover }).ToArray() : CountInts.ToArray(); 
    } 
} 
Смежные вопросы