題目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。我去,求和居然不讓用乘除法,也不准我們用迴圈,如果單獨這兩個限制的話還好,我們還可以用地遞迴,例如:
f(int n)else
}
然後 if, else, case 等各種關鍵字也不給用,想著那我用三元運算子(a?b:c),然後這種具有判斷語句的三元運算子也不給用,我去,這也太刁難了吧(當然,大佬直接秒殺的可以飄過)。
這道題肯定是必須用遞迴來解決的,而這遞迴的核心就是需要判斷一下遞迴條件是否結束了,然而題目不准我們使用條件判斷語句。那我們該怎麼辦呢?大家可以散發思維想一下哦。
其實我們可以下面這樣的語句來代替a?b:c這樣具有判斷能力的三元運算子
n != 0 && (f(n-1) + n) != 0;0 && (f(n-1) + n) != 0;
這個&&邏輯判斷符的作用就是:如果 n != 0 成立的話,那麼邏輯判斷符後面的判斷語句 (f(n-1) + n ) != 0 也會執行,如果 n != 0 不成立的話,那麼後面的判斷語句 ((f(n-1) + n)) != 0 就不會執行,通過這種方法,就可以達到我們遞迴結束條件判斷的目的了。
這裡說明一下,(f(n-1) + n) != 0 這條判斷語句是沒有任意其他含義的,我們的目的是為了執行 f(n-1)+n,之所以加上個 != 0 的判斷,是因為邏輯判斷符號&&只支援 boolean 型別,不支援 int 型別。最後的**如下
var sum;
function fn(n)
console.log(fn(4));
題目描述:寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。我去,求和不准加減乘除!面試官,能不能別這麼任性,好好的加減乘除居然不給用。
不過我相信大家第一時間都能想到用位運算來解決,可能在大學期間學過電路相關知識的一下就能把**寫出來了,不過有些人也能可能是乙個位乙個位來處理的。例如我先處理第乙個位(這裡指的是二進位制位哈),看看有沒進製,然後處理第二個位,如果第乙個位有進製就加到第二個位來,然後處理第三個位…..
如果你是這種方法處理的,那麼恭喜你,看完這道題你能有所收穫。實際上上面那種解法也可以,只是太複雜了,可能各種判斷。其實這道題可以這樣解:這裡為了方便講解,我先給出**,再給出具體的講解,你看完**再來看講解可能更好理解
function add(num1, num2)
console.log(add(123, 321));
大家想乙個問題,如果我們把兩個數進行異或,例如num1 = 101, num2 = 001,做異或運算:tmp = num1 ^ num2,結果是 tmp = 100。那麼此時得到的結果 tmp 其實就是兩個數(num1,num2)各個二進位制位上相加,不算進製的結果。而 num1 = (num1 & num2) << 1 的結果就是兩個數相加時那些需要進製的二進位制位。例如 (101 & 001)<< 1 = 010,那麼兩個數第一位相加需要進製,我們需要把進的那一位最後加到第二位上去。
好像有點繞,,大家可以動手試一下哈,說白就是 a + b = a ^ b + (a & b) << 1。
牛客演算法入門題 糖糖別胡說,我真的不是簽到題目
題目鏈結 解題思想 差分 字首和 解題思路 對於n個糖糖,每個有能力值bi,對整個糖糖陣列進行ci次操作,每次操作完bi 1,對於每次判斷哪些糖糖會被消滅,如果暴力的話每次都要掃瞄ci之前的區間以判斷在ci之 前和第i個糖糖不同組且bi更小的,顯然這樣的話至少是n方的複雜度,但是空間限制數量級約是1...
你的愛是不是在等著我
你的愛是不是在等著我 代騰飛 2008年11月16日 於成都 歲月如梭 青春那堪經得住折磨 驀然回首 青春年華已似水流過 一去不回頭 只是如今還是乙個人活 真不知道這是痛還是樂 時光在流,風景在走 在動,心卻成空 在這寂寞夜深的寒冬 也依然只能乙個人獨自挨凍 夜已沉默,心事向誰說 天已入冬,心誰來解...
我的有道第二題(不是雙倍超立方)
先說明一下,我遇到的第二題跟大家先前討論的第二題題目不同,不過最近演算法挺火,也就放上來,大家一起討論討論,而且我覺得有道這次比賽非常好,我看了下topcode平台,大家平時也可以進這個平台練習一下演算法,不過。有道的翻譯還真有待提高了 宣告一下,我演算法沒有學過,只是想到了解決的方法,當時理解題目...