好的,這是我從CodeEval中挑戰的挑戰。我必須從以標準方式格式化的文件讀取數字,它在每行(x,n)上有一對由逗號分隔的數字。我必須讀取這些值並對它們進行處理,然後打印n的最小倍數,它大於或等於x,其中n是2的冪。從文件中讀取一對數字並處理它們的快速和低內存消耗方式?
確切要求:給定數字x和n ,其中n是2的冪,打印出大於或等於x的n的最小倍數。不要使用除法或模數運算符。
我已經想出了一些解決方案,但他們都不滿足電腦的條件讓我通過挑戰。我只得到部分完成,分數從30到80(從100)不等。
我假設我的解決方案沒有通過速度,但更可能是內存使用要求。
如果有人能夠啓發我,並提供更好,更有效的解決方案,我將不勝感激。
這裏是我的兩個解決方案:
var filePath = @"C:\Users\myfile.txt";
int x;
int n;
using (var reader = new StreamReader(filePath))
{
string numsFile = string.Empty;
while ((numsFile = reader.ReadLine()) != null)
{
var nums = numsFile.Split(',').ToArray();
x = int.Parse(nums[0]);
n = int.Parse(nums[1]);
Console.WriteLine(DangleNumbers(x, n));
}
}
< < < >>>
var fileNums = File.ReadAllLines(filePath);
foreach (var line in fileNums)
{
var nums = line.Split(',').ToArray();
x = int.Parse(nums[0]);
n = int.Parse(nums[1]);
Console.WriteLine(DangleNumbers(x, n));
}
方法來檢查數字
public static int DangleNumbers(int x, int n)
{
int m = 2;
while ((n * m) < x)
{
m += 2;
}
return m * n;
}
我是相當新的C#和編搗毀,但這兩種方式,我發現從我嘗試過的其他幾個人得到最好的分數。我認爲在每次迭代中創建一個新的string
都不太理想,我也不知道如何使用StringBuilder
並從中獲取值爲Int
。
任何正確的方向指針將不勝感激,因爲我真的想通過這個挑戰。
你爲什麼要做m + = 2?如果x是14,n是5,你不想打印出來15,而不是這個函數提供的20?可能只是因爲程序錯誤而導致你的分數不好? – Chris
1.在循環之外創建儘可能多的變量爲什麼在每一輪創建它們,當你可以簡單地重新設置它們的值? 2.「DangleNumbers」功能也一樣。T這裏不需要每次都創建相同的'm',只需將其設置爲全局只讀整數,因爲您需要它的常量值。 +你只需要'm ++',這樣就可以檢查所有後續的乘數,而不是每次跳過2。 –
爲什麼你要將m加2並從m = 2開始? – Adwaenyth