我想找到给定一定数量的所有3的倍数,并找到余数。
例如:
给定数字10:3的倍数= {3; 6; 9} +余数= 1
给定数字11:3的倍数= {3; 6; 9} +余数= 2
到目前为止我的算法(但不是代码)是这样的:
使用更少的代码有更好的方法吗?
编辑:还有2件事,我只想找3 - 所以这可能是一个常数。还有任何小于3:2,1和0的数字 - 我不介意为此提供额外的逻辑。
答案 0 :(得分:13)
IEnumerable<int> Foo(int n, int k)
{
int m = k;
while (m <= n)
{
yield return m;
m += k;
}
yield return m - n;
}
答案 1 :(得分:12)
Integer division(/
)和modulus(%
)是您的朋友:
var multiples = num / 3;
var remainder = num % 3;
答案 2 :(得分:4)
x =给定数字
y =循环数
y从0到x循环,每次增加3 如果y> x然后remender是(x-(y-3))
答案 3 :(得分:1)
您可以使用分隔符/和模数%
http://msdn.microsoft.com/en-us/library/3b1ff23f.aspx
10 / 3 = 3
http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx
10 % 3 = 1
答案 4 :(得分:1)
int number = 10;
int divisor = 3;
List<int> numbers;
// Find all the numbers by incrementing i by the divisor.
for(int i = 0; i < number; i += divisor)
{
numbers.Add(i);
}
// Find the remainder using modulus operator.
int remainder = number % divisor;
答案 5 :(得分:1)
这是您的确切输出
private static void Main(string[] args)
{
int num = 10;
int divisor = 3;
if(num<divisor)
Console.Write(num + " is less than " + divisor);
Console.Write("Given the number " + num + " : multiples of " + divisor + " = {");
for (int i = divisor; i < num; i+=divisor)
Console.Write((i!=3) ? ";"+i : i.ToString());
Console.Write("} + remainder = " + num%divisor);
}
<强>输出强>
Given the number 10 : multiples of 3 = {3;6;9} + remainder = 1
并检查输入是否小于除数
答案 6 :(得分:1)
您只需枚举输出值
即可 public static IEnumerable<int> GetMultiples(int value, int divisor) {
// Be care of negative and zero values...
if ((value <= 0) || (divisor <= 0))
yield break;
// Multiplications
for (int i = 1; i <= value / divisor; ++i)
yield return i * divisor;
// Finally, let's return remainder if it's non-zero
if ((value % divisor) != 0)
yield return value % divisor;
}
...
foreach(int item in GetMultiples(10, 3)) { // item will be 3, 6, 9, 1
...
}
答案 7 :(得分:0)
您可以使用operator modulo
%
但如果你经常使用很慢......
答案 8 :(得分:0)
这将为您提供所需的输出:
int num;
Console.WriteLine("give me a number equal or above 3!");
int.TryParse(Console.ReadLine(),out num);
int i = 0;
List<int> nums = new List<int>();
i += 3;
while (i <= num)
{
nums.Add(i);
i += 3;
}
Console.Write("Numbers are: ");
foreach (int y in nums)
{
Console.Write(y + " , ");
}
Console.WriteLine("The remainder is " + (num - nums[nums.Count - 1]));
答案 9 :(得分:0)
不是LINQ专门为此而构建的吗?
IEnumerable<int> GetMultiples(int max)
{
return Enumerable.Range(1, max / 3)
.Select(p => p * 3)
.Concat((max %= 3) == 0 ? new int[0] : new int[] { max });
}