麻将胡牌算法

运用递归思路,先找出两张一样的牌作将牌,然后在剩下的牌中找顺子和三个一样的牌,当剩余的牌数为0,则排定可以胡牌。目前只是四川麻将的赢牌番型,除去风牌的。可自行进行扩展。(万:11-19,筒:21-29,条31-39),直接可以下载使用。

mjwintable类:

--赢牌倍率

gMJWinRate = { 1, 2, 4, 4, 4, 4, 8, 8, 8, 16, 16, 16, 16, 32, 64, 256 }

gMJWinFJRate = { 2, 2 }

--赢牌基本类型

gMJWinType = { }

--翻1倍

gMJWinType.ordinary = 1 --平胡

--翻2倍

gMJWinType.duiduiHu = 2 --对对胡

--翻4倍

gMJWinType.ordinaryQ = 3 --清一色

gMJWinType.yaojiu = 4 --幺九

gMJWinType.sevendui = 5 --七小对

gMJWinType.jingou = 6 --金钩钓

--翻8倍

gMJWinType.duiduiHuQ = 7 --对对胡清一色

gMJWinType.duiduiHu258 = 8 --对对胡258

gMJWinType.sevenduiQ = 9 --清七小对

--翻16倍

gMJWinType.yaojiuQ = 10 --幺九清一色

gMJWinType.sevenduiL = 11 --龙七小对

gMJWinType.jingouQ = 12 --清金钩钓

gMJWinType.jingou258 = 13 --金钩钓258

--翻32倍

gMJWinType.sevenduiQL = 14 --清龙七小对

--翻64倍

gMJWinType.arhat = 15 --十八罗汉

--翻256倍

gMJWinType.arhatQ = 16 --清十八罗汉

--赢牌附加类型

gMJWinFJType = { }

gMJWinFJType.noyaojiu = 1 --断幺九

gMJWinFJType.doorclear = 2 --门前清

--外部调用方法

--匹配牌型(1--总牌,2--手牌,3--杠数)

--paislist所有牌table包括手牌、碰牌、杠牌(去掉一张按三张算)如:paislist = {11,12,13,14,15,33,21}

--handpaisList手牌table 如:handpaisList = {11,12,13,14,15,33,21}

--gangPengList杠碰牌table

--gangNum杠个数

function CheckMJWinTable( paislist, handpaisList, gangPengList, gangNum )

if #paislist ~= 14 then

do return end

end

table.sort( paislist, function( a, b )

return a < b

end)

table.sort( handpaisList, function( a, b )

return a < b

end)

local isWin = false

local winType = nil

local sameColour = TableBySameColour(paislist)

if gangNum == 4 then-- 判断十八罗汉

if handpaisList[ 1 ] == handpaisList[ 2 ] then

local paiType= math.floor( handpaisList[ 1 ] / 10 )

for pai, v in pairs( gangPengList ) do

if math.floor( pai / 10 ) ~= paiType then

winType= gMJWinType.arhat

do return true, winType end

end

end

winType= gMJWinType.arhatQ

do return true, winType end

end

else

local win, duiLong = MJWinTableBySevenDouble( handpaisList )

if win == true then -- 判断七对

if sameColour == true then

if duiLong == true then

winType= gMJWinType.sevenduiQL

else

winType= gMJWinType.sevenduiQ

end

else

if duiLong == true then

winType= gMJWinType.sevenduiL

else

winType= gMJWinType.sevendui

end

end

do return win, winType end

elseif MJWinTableByCommon( handpaisList ) then

local duiWin = TableByDuiDuiHu( handpaisList, gangPengList, gangNum )

local win19 = MJWinTableByCommon( handpaisList, gangPengList, 19 )

local win258 = MJWinTableByCommon( handpaisList, gangPengList, 258 )

local jingouWin= #handpaisList == 2

if jingouWin == true and ( win258 == true or sameColour == true ) then

if win258 == true then

winType= gMJWinType.jingou258

else

winType= gMJWinType.jingouQ

end

do return true, winType end

elseif win19 == true and sameColour == true then-- 青19

winType= gMJWinType.yaojiuQ

do return true, winType end

elseif duiWin == true and ( win258 == true or sameColour == true ) then

if win258 == true then

winType= gMJWinType.duiduiHu258

else

winType= gMJWinType.duiduiHuQ

end

do return true, winType end

elseif sameColour == true or win19 == true or jingouWin == true then

if sameColour == true then

winType= gMJWinType.ordinaryQ

elseif win19 == true then

winType= gMJWinType.yaojiu

else

winType= gMJWinType.jingou

end

do return true, winType end

elseif duiWin == true then

winType= gMJWinType.duiduiHu

do return true, winType end

else

winType= gMJWinType.ordinary

do return true, winType end

end

end

end

return false

end

--检测附加翻型(在胡牌的基础上判断)参数1--断幺九,参数2--门清

function CheckMJFJType( paislist, handpaisList )

local isDuanYaoJiu= false

local isMenQing= false

local paiNum = 0

for index, pai in pairs( paislist ) do

if pai % 10 ~= 9 and pai % 10 ~= 1 then

paiNum = paiNum + 1

end

end

if paiNum == 14 then

isDuanYaoJiu = true

end

if #handpaisList == 14 then

isMenQing = true

end

return isDuanYaoJiu, isMenQing

end

-- 普通胡牌

function MJWinTableByCommon( handpaisList, gangPengList, winType )

if winType == 19 then

for pai, v in pairs( gangPengList ) do

if pai % 10 ~= 1 and pai % 10 ~= 9 then

return false

end

end

elseif winType == 258 then

for pai, v in pairs( gangPengList ) do

if pai % 10 ~= 2 and pai % 10 ~= 5 and pai % 10 ~= 8 then

return false

end

end

end

if #handpaisList == 2 then

do return handpaisList[ 1 ] == handpaisList[ 2 ] end

end

local genList= MJFindGen( handpaisList, winType )

if genList == nil then

return false

else

for num, paiList in pairs( genList ) do

local state = MJWinTableCommonCheckWin( paiList, winType )

if state == true then

return true

end

end

end

return false

end

function MJWinTableCommonCheckWin( paiList, winType )

local shunziList= MFFindShunZi( paiList, winType )

if shunziList == nil then

return false

else

for num, pailist in pairs( shunziList ) do

if #pailist == 0 then

return true

else

local state = MJWinTableCommonCheckWin( pailist, winType )

if state == true then

return true

end

end

end

end

end

-- genType: 1919根

-- genType: 258258根

function MJFindGen( handpaisList, genType )

local genList= {}

local haveGen= false

for index1 = 1, #handpaisList - 1 do

local findNum= handpaisList[ index1 ]

if genList[ findNum ] == nil then

for index2 = index1 + 1, #handpaisList do

if genType == 19 then

if handpaisList[ index2 ] == findNum and ( findNum % 10 == 1 or findNum % 10 == 9 ) then

genList[ findNum ]= Util.CloneTable( handpaisList )

table.remove( genList[ findNum ], index2 )

table.remove( genList[ findNum ], index1 )

haveGen= true

break

end

elseif genType == 258 then

if handpaisList[ index2 ] == findNum and ( findNum % 10 == 2 or findNum % 10 == 5 or findNum % 10 == 8 ) then

genList[ findNum ]= Util.CloneTable( handpaisList )

table.remove( genList[ findNum ], index2 )

table.remove( genList[ findNum ], index1 )

haveGen= true

break

end

else

if handpaisList[ index2 ] == findNum then

genList[ findNum ]= Util.CloneTable( handpaisList )

table.remove( genList[ findNum ], index2 )

table.remove( genList[ findNum ], index1 )

haveGen= true

break

end

end

end

end

end

if haveGen == true then

return genList

else

return nil

end

end

-- sType: 19 19顺子

-- sType: 258 258顺子

function MFFindShunZi( handpaisList, sType )

local shunziList= {}

local haveShunzi= false

for index, value in pairs( handpaisList ) do

if sType == 19 then

if ( value % 10 == 1 or value % 10 == 9 ) and shunziList[ value .. value .. value ] == nil then

local findList1= Util.TableFind( handpaisList, value )

if #findList1 >= 3 then

local sign = value .. value .. value

shunziList[ sign ]= Util.CloneTable( handpaisList )

table.remove( shunziList[ sign ], findList1[ 3 ] )

table.remove( shunziList[ sign ], findList1[ 2 ] )

table.remove( shunziList[ sign ], findList1[ 1 ] )

haveShunzi = true

end

end

if ( value % 10 == 1 or value % 10 == 7 ) and shunziList[ value .. value + 1 .. value + 2 ] == nil then

local findList1 = Util.TableFind( handpaisList, value + 1 )

if #findList1 ~= 0 then

local findList2 = Util.TableFind( handpaisList, value + 2 )

if #findList2 ~= 0 then

local sign = value .. value + 1 .. value + 2

shunziList[ sign ]= Util.CloneTable( handpaisList )

local sorList= { index, findList1[ 1 ], findList2[ 1 ] }

table.sort( sorList, MJPaiSort )

table.remove( shunziList[ sign ], sorList[ 3 ] )

table.remove( shunziList[ sign ], sorList[ 2 ] )

table.remove( shunziList[ sign ], sorList[ 1 ] )

haveShunzi = true

end

end

end

elseif sType == 258 then

if ( value % 10 == 2 or value % 10 == 5 or value % 10 == 8 ) and shunziList[ value .. value .. value ] == nil then

local findList1= Util.TableFind( handpaisList, value )

if #findList1 >= 3 then

local sign = value .. value .. value

shunziList[ sign ]= Util.CloneTable( handpaisList )

table.remove( shunziList[ sign ], findList1[ 3 ] )

table.remove( shunziList[ sign ], findList1[ 2 ] )

table.remove( shunziList[ sign ], findList1[ 1 ] )

haveShunzi = true

end

end

else

if shunziList[ value .. value .. value ] == nil or shunziList[ value .. value + 1 .. value + 2 ] == nil then

local findList1 = Util.TableFind( handpaisList, value + 1 )

if #findList1 ~= 0 then

local findList2 = Util.TableFind( handpaisList, value + 2 )

if #findList2 ~= 0 then

local sign = value .. value + 1 .. value + 2

shunziList[ sign ]= Util.CloneTable( handpaisList )

local sorList= { index, findList1[ 1 ], findList2[ 1 ] }

table.sort( sorList, MJPaiSort )

table.remove( shunziList[ sign ], sorList[ 3 ] )

table.remove( shunziList[ sign ], sorList[ 2 ] )

table.remove( shunziList[ sign ], sorList[ 1 ] )

haveShunzi = true

end

end

findList1= Util.TableFind( handpaisList, value )

if #findList1 >= 3 then

local sign = value .. value .. value

shunziList[ sign ]= Util.CloneTable( handpaisList )

table.remove( shunziList[ sign ], findList1[ 3 ] )

table.remove( shunziList[ sign ], findList1[ 2 ] )

table.remove( shunziList[ sign ], findList1[ 1 ] )

haveShunzi = true

end

end

end

end

if haveShunzi == true then

return shunziList

else

return nil

end

end

--七小对

function MJWinTableBySevenDouble( handpaisList )

if #handpaisList ~= 14 then

return

end

local doubleList = {}

local haveLong = false

for index = 1, 13, 2 do

if handpaisList[ index ] ~= handpaisList[ index + 1 ] then

return false

else

table.insert( doubleList, handpaisList[ index ] )

end

end

local beforenum= doubleList[ 1 ]

for index = 2, 7 do

if beforenum == doubleList[index] then

haveLong = true

break

else

beforenum = doubleList[index]

end

end

return true, haveLong

end

--清一色

function TableBySameColour( paisList )

if paisList[ 14 ] < 20 then

return true

elseif paisList[ 1 ] > 20 and paisList[ 14 ] < 30 then

return true

elseif paisList[ 1 ] > 30 and paisList[ 14 ] < 40 then

return true

end

return false

end

--对对胡

function TableByDuiDuiHu( paislist, gangPengList, gangNum )

if gangNum ~= 0 then

return false

end

local count3= 0

local count2= 0

local continuecount= 1

local beforenum= paislist[ 1 ]

for index = 2, #paislist do

if beforenum == paislist[ index ] then

continuecount= continuecount + 1

else

if continuecount == 2 then

count2= count2 + 1

elseif continuecount == 3 then

count3= count3 + 1

else

return false

end

continuecount= 1

beforenum= paislist[ index ]

end

end

if continuecount == 2 then

count2= count2 + 1

elseif continuecount == 3 then

count3= count3 + 1

end

if count2 == 1 and count3 + Util.GetTableLength( gangPengList ) == 4 then

return true

end

end

-- --排序

function MJPaiSort( pai1, pai2 )

return pai1 < pai2

end

Util类

-- 深度拷贝table, 基础数据类型没有问题( number, string, boolean, table ),其他的比如:(function 等等)不要挑战

local function cloneTable( vTable )

if type( vTable ) ~= "table" then

return nil;

end

local tClone = {}

for i, v in pairs( vTable ) do

if type( v ) == "table" then

tClone[ i ] = cloneTable( v )

else

tClone[ i ] = v

end

end

return tClone

end

-- 深度比对拷贝table, 基础数据类型没有问题( number, string, boolean, table ),其他的比如:(function 等等)不要挑战

local function compareTable( vSrcTable, vDesTable )

if type( vSrcTable ) ~= "table" then

return nil;

end

for i, v in pairs( vSrcTable ) do

if type( v ) == "table" then

if vDesTable[ i ] == nil then

vDesTable[ i ] = {}

end

compareTable( v, vDesTable[ i ] )

else

if vDesTable[ i ] == nil then

vDesTable[ i ] = v

end

end

end

end

local function printTable( vTable, vLevel )

local indent ="" -- i缩进,当前调用缩进

if vLevel == nil then

vLevel = 0

end

for i = 1, vLevel do

indent = indent.." "

end

local tHasElm = false

for k, v in pairs( vTable ) do

if tHasElm == false then

System.Log( indent.."{" )

tHasElm = true

end

if ( type( v ) == "table" ) then -- type(v) 当前类型时否table 如果是,则需要递归,

System.Log( indent.." " .. "[" .. k .. "]" )

printTable( v, vLevel + 1 )

else -- 否则直接输出当前值

System.Log( indent.." " .. "[" .. k .. "] = [" ..tostring( v ).."]" )

end

end

if tHasElm == true then

System.Log( indent.."}" )

end

end

local function splitString( text, split, len )

if len == nil then

len = 1

end

local textSet = {}

local startIndex = 0

local length = string.len( text )

while startIndex <= length do

local findSI, findEI = string.find( text, split, startIndex )

if findEI == nil then

findEI= length + len

end

local textItem = string.sub( text, startIndex, findEI - len )

table.insert( textSet, textItem )

startIndex = findEI + 1

end

return textSet

end

local base32 = {'0', '1', '2', '3', '4', '5','6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',

'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y'}

local function str10Convert32( strnum )

local num = tonumber(strnum)

local numtb = {}

local ret = ""

if num > 0 then

while num > 0 do

numtb[#numtb + 1] = num %32

num = math.floor( num / 32)

end

for i = #numtb, 1, -1 do

ret = ret .. base32[numtb[i] + 1]

end

elseif num == 0 then

ret = "0"

else

num = math.abs(num)

while num > 0 do

numtb[#numtb + 1] = num %32

num = math.floor( num / 32)

end

ret = ret .. "-"

for i = #numtb, 1, -1 do

ret = ret .. base32[numtb[i] + 1]

end

end

return ret

end

-- 不区分大小写

local function str32Convert10( numStr )

assert(numStr, "can't be nil")

numStr = string.upper(numStr)

local ret = 0

local function findBase32Index( ch )

for k, v in pairs( base32 ) do

if v == ch then

return k

end

end

end

local pownum = 0

for i = #numStr, 1, -1 do

local temp = string.sub( numStr, i, i)

local index = findBase32Index( temp )

if not index then return end

ret = ret + (index-1)*math.pow(32, pownum)

pownum = pownum + 1

end

return tostring(ret)

end

local function formatNumber( num )

if num < 10000 then

return num

else

return math.floor( num / 10000 ) .. "万"

end

end

local function getStringCharCount( str )

local charCount = 0

local byteCount = 0

for i = 1, #str do

if byteCount > 1 then

byteCount = byteCount - 1

else

local curByte = string.byte( str, i )

if curByte > 0 and curByte <= 127 then

byteCount = 1

elseif curByte >= 192 and curByte < 224 then

byteCount = 2

elseif curByte >= 224 and curByte < 240 then

byteCount = 3

elseif curByte >= 240 and curByte < 248 then

byteCount = 4

elseif curByte >= 248 and curByte < 252 then

byteCount = 5

else

byteCount = 6

end

charCount = charCount + 1

end

end

return charCount

end

local function getStringCharArray( str )

local charArray= {}

local byteCount= 0

for index = 1, #str do

if byteCount > 1 then

byteCount = byteCount - 1

else

local curByte = string.byte( str, index )

if curByte > 0 and curByte <= 127 then

byteCount = 1

elseif curByte >= 192 and curByte < 224 then

byteCount = 2

elseif curByte >= 224 and curByte < 240 then

byteCount = 3

elseif curByte >= 240 and curByte < 248 then

byteCount = 4

elseif curByte >= 248 and curByte < 252 then

byteCount = 5

else

byteCount = 6

end

table.insert( charArray, string.sub( str, index, index + byteCount - 1 ) )

end

end

return charArray

end

local function getUserTableInfo( userTableInfo )

local tableInfo = splitString( userTableInfo, "_" )

if #tableInfo == 2 then

return tableInfo[ 1 ], tonumber( tableInfo[ 2 ] )

end

end

local function isInt( num )

return num == math.floor( num )

end

local function getTableLength( t )

local length= 0

for key, value in pairs( t ) do

length= length + 1

end

return length

end

local function dateToSecond( date )

local dateStr = Util.SplitString( date, "-" )

local time = os.time({year = "20"..dateStr[1], month = dateStr[2], day = dateStr[3]})

return time

end

local function getToday0ClockTime( )

local date= os.date( "*t" )

return os.time( { year = date.year, month = date.month, day = date.day, hour = 0, minute = 0, second = 0 } )

end

local function jsonGetValue( text, name )

local _, findEnd = string.find( text, [["]] .. name .. [[":]] )

if findEnd == nil then

System.Log( "findEnd " .. tostring( findEnd ) .. " " .. tostring( text ) .. " " .. tostring( name ) )

return nil

end

local startPos, endPos = string.find( text, ",", findEnd + 1 )

System.Log( "startPos " .. tostring( startPos ) )

if startPos == nil then

startPos, endPos = string.find( text, "}", findEnd + 1 )

end

System.Log( "startPos2 " .. tostring( startPos ) )

local valueDir = string.sub( text, findEnd + 1, startPos - 1 )

local tTextSet = splitString( valueDir, [["]] )

System.Log( "tTextSet[ 2 ] " .. tostring( tTextSet[ 2 ] ) )

return tTextSet[ 2 ] == nil and tTextSet[ 1 ] or tTextSet[ 2 ]

end

local function formatNumEx2( num )

num= num + 0.0001

if num >= 100000000 then

if math.floor( num / 10000000 ) / 10 == math.floor( num / 100000000 ) then

return math.floor( num / 100000000 ) .. "亿"

else

return math.floor( num / 10000000 ) / 10 .. "亿"

end

elseif num >= 10000 then

if math.floor( num / 1000 ) / 10 == math.floor( num / 10000 ) then

return math.floor( num / 10000 ) .. "万"

else

return math.floor( num / 1000 ) / 10 .. "万"

end

else

return math.floor( num )

end

end

function delTableKeys( vTable, vKeys )

local newTables= {}

for key, value in pairs( vTable ) do

if vKeys[ key ] == nil then

newTables[ key ]= value

end

end

return newTables

end

function keepTableKeys( vTable, vKeys )

local newTables= {}

for key, value in pairs( vTable ) do

if vKeys[ key ] ~= nil then

newTables[ key ]= value

end

end

return newTables

end

local function jsonObjToTable( jsonObj )

if jsonObj[ "_keys" ] ~= nil then

local objTable= {}

for index = 1, #jsonObj[ "_keys" ] do

local key= jsonObj[ "_keys" ][ index ]

local value= jsonObj[ "_values" ][ index ]

if type( value ) == "table" then

objTable[ key ]= jsonObjToTable( value )

else

objTable[ key ]= value

end

end

return objTable

end

end

local lJson = _G[ 'json' ]

local function jsonFKLJDecode( jsonStr )

if jsonStr ~= nil and type( jsonStr ) == "string" then

local jsonObj= lJson.decode( jsonStr, 1, nil )

local jsonTable = jsonObjToTable( jsonObj )

return jsonTable

end

end

local function jsonFKLJEncode( jsonObj )

if jsonObj ~= nil then

local jsonKeysStr= ""

local jsonValuesStr = ""

local spacePoint= ""

if type( jsonObj ) == "number" then

return jsonObj

elseif type( jsonObj ) == "string" then

return jsonObj

elseif type( jsonObj ) == "boolean" then

return jsonObj

end

if Util.GetTableLength( jsonObj ) == 0 then

return '{"_keys":[],"_values":[]}'

end

for key, value in pairs( jsonObj ) do

if type( key ) == "number" then

jsonKeysStr= jsonKeysStr .. ( jsonKeysStr == "" and '\"_keys\":[' .. spacePoint .. key or spacePoint .. key )

elseif type( key ) == "string" then

jsonKeysStr= jsonKeysStr .. ( jsonKeysStr == "" and '\"_keys\":[' .. spacePoint .. '\"' .. key .. '\"' or spacePoint .. '\"' .. key .. '\"' )

end

if type( value ) == "table" then

jsonValuesStr= jsonValuesStr .. ( jsonValuesStr == "" and '\"_values\":[' .. spacePoint .. jsonFKLJEncode( value ) or spacePoint .. jsonFKLJEncode( value ) )

else

if type( value ) == "number" then

jsonValuesStr= jsonValuesStr .. ( jsonValuesStr == "" and '\"_values\":[' .. spacePoint .. value or spacePoint .. value )

elseif type( value ) == "string" then

jsonValuesStr= jsonValuesStr .. ( jsonValuesStr == "" and '\"_values\":[' .. spacePoint .. '\"' .. value .. '\"' or spacePoint .. '\"' .. value .. '\"' )

elseif type( value ) == "boolean" then

jsonValuesStr= jsonValuesStr .. ( jsonValuesStr == "" and '\"_values\":[' .. spacePoint .. tostring( value ) or spacePoint .. tostring( value ) )

end

end

spacePoint= ","

end

return jsonKeysStr == "" and jsonKeysStr or "{" .. jsonKeysStr .. "]," .. jsonValuesStr .. "]}"

end

return ""

end

local lSQLBadStr = "sitename|net user|xp_cmdshell|and|exec|execute|insert|create|drop|" ..

"table|from|grant|use|group_concat|column_name|" ..

"information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" ..

"chr|mid|master|truncate|char|declare|or|;|like|//|/|#"

local lSQLBadWords= {}

local function sqlCheck( str )

if #lSQLBadWords == 0 then

lSQLBadWords= Util.SplitString( lSQLBadStr, "|" )

end

local lowerStr= string.lower( str )

System.Log( "lowerStr " .. tostring( lowerStr ) )

for index = 1, #lSQLBadWords do

if string.find( lowerStr, lSQLBadWords[ index ] ) ~= nil then

System.Log( "lSQLBadWords[ index ] " .. " " .. tostring( lSQLBadWords[ index ] ) .. " " .. tostring( string.find( lowerStr, lSQLBadWords[ index ] ) ) )

return false

end

end

return true

end

local function removeTableValue( srcTable, delValue )

for key, value in pairs( srcTable ) do

if value == delValue then

table.remove( srcTable, key )

break

end

end

end

local function checkTableValueExist( srcTable, value )

for key, tableValue in pairs( srcTable ) do

if value == tableValue then

return true

end

end

return false

end

local function tableFind( srcTable, desValue )

local keyList= {}

for key, value in pairs( srcTable ) do

if value == desValue then

table.insert( keyList, key )

end

end

return keyList

end

Util= {

CloneTable= cloneTable,

CompareTable= compareTable,

PrintTable= printTable,

SplitString= splitString,

Str10Convert32= str10Convert32,

Str32Convert10= str32Convert10,

FormatNumber= formatNumber,

GetStringCharCount = getStringCharCount,

GetStringCharArray = getStringCharArray,

GetUserTableInfo = getUserTableInfo,

IsInt= isInt,

GetTableLength= getTableLength,

DateToSecond= dateToSecond,

GetToday0ClockTime= getToday0ClockTime,

JSONGetValue= jsonGetValue,

JSONGetTable= jsonGetTable,

FormatNumEx2 = formatNumEx2,

DelTableKeys= delTableKeys,

KeepTableKeys= keepTableKeys,

JSONFKLJDecode= jsonFKLJDecode,

JSONFKLJEncode= jsonFKLJEncode,

SQLCheck= sqlCheck,

RemoveTableValue = removeTableValue,

CheckTableValueExist= checkTableValueExist,

TableFind= tableFind,

}

C语言麻将递归,【算法SQL面试题】面试问题:麻将胡牌递归算… - 看准网相关推荐

  1. 优信拍集团php面试题_【优信拍PHP面试】一次不错的面试体验,面试官根据实际出发提问。-看准网...

    投递了校招补录,由于自己的疏忽之前没有接电话,昨天好心的hr姐姐打电话临时给我安排到了最后一轮面试,赶过去,最后一组加我一共六人,大家简单认识了一下后先进行了第一轮群面,两个业务部面试官,可是我赶过来 ...

  2. 多线程可以使用计算机多核那,【多线程逻辑面试题】面试问题:异步操作的优缺… - 看准网...

    我曾经提到异步操作能提高系统的吞吐能力,正确使用异步操作来校正滥用异步的错误做法,那异步究竟有何优点值得我们使用?而又有什么缺点需要我们使用的时候小心呢?诚如老赵所说, 异步并不一定能提高系统性能,甚 ...

  3. linux 内存 面试,【Linux内存面试题】面试问题:查看机器配置命… - 看准网

    1.查看内存大小 solari:prtconf -vp | grep Mem linux :grep MemTotal /proc/meminfo 2.查看硬盘大小 solari:df -k linu ...

  4. python选择题题目_【Python测试面试题】面试问题:《我的Padd… - 看准网

    目录 文章目录目录数据集介绍生成图像列表读取数据定义神经网络使用PaddlePaddle开始训练导入依赖包初始化Paddle获取参数创建训练器开始训练使用PaddlePaddle预测所有代码项目代码参 ...

  5. python面试题百度云下载_【百度Python面试题及回答技巧有哪些?】-看准网

    百度,全球最大的中文搜索引擎.最大的中文网站.2000年1月创立于北京中关村. 1999年底,身在美国硅谷的李彦宏看到了中国互联网及中文搜索引擎服务的巨大发展潜力,抱着技术改变世界的梦想,他毅然辞掉硅 ...

  6. php小红书,【小红书逻辑PHP面试题】面试问题:PHP小红书文… - 看准网

    /** * 爬虫逻辑 * 获取html内容 */ public function crawler($centent_url) { //https://www.xiaohongshu.com/disco ...

  7. linux链表概念,【链表Linux面试题】面试问题:进程的基本概念… - 看准网

    一.背景 1.操作系统(Operator System)的概念: 任何计算机都包含一个基本的程序集合,称为操作系统(简称OS).笼统的理解,操作系统包括: 1)内核,其含有内核管理.进程管理.驱动管理 ...

  8. 百度linux c面试题,【百度百度糯米算法百度LinuxC语言数据面试题】面试问题:百度笔试题… - 看准网...

    第一部分选择题: 有几道网络相关的题目,巨简单,比如第一题是TCP.RIP.IP.FTP中哪个协议是传输层的.......有一道linux的chown使用题目.其他的全是数据结构的题目!什么链,表,码 ...

  9. 啊哈c语言九九乘法表,【算法字符串面试题】面试问题:啊哈C!循环结… - 看准网...

    13个经典案例: 程序分析在文档结尾处. 案例01.求1-100累计和 案例02.求10! 案例03.12个月的煤气费用 案例04.拓展:n! = 1 * 2 * 3 * -n 案例05.讨论:编写程 ...

最新文章

  1. Openoffice 安装与配置
  2. 软件测试培训适合什么人学习?
  3. 阿里某员工面试华为后吐槽:面试官太水,反问几句都答不上来
  4. Visual Studio Code之常备快捷键
  5. FUN ALV TOOLBAR 增加自定义按钮
  6. 初学js----------一些API
  7. 常见JSP中文乱码例子及其解决方法
  8. Android Studio 如何打JAR包
  9. 【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作
  10. 使用webpack搭建个性化项目
  11. 树莓派能直接运行python程序_树莓派怎么运行python程序
  12. BootStrap笔记-按钮相关
  13. java checker_java 英文单词纠正校验框架(Word Checker)
  14. mfc mfc100ud.dll丢失问题
  15. phpstudy安装ssl证书_给网站安装免费SSL证书
  16. H.264标准(一)MP4封装格式详解
  17. 【浙大第19届校赛:B】Even Number Theory (数论n!中有多少个质因子2+java大数)
  18. Leetcode每日一题 面试题56 - I.数组中数字出现的次数
  19. Excel中DATEDIF函数的使用方法基础篇
  20. 2022建筑架子工(建筑特殊工种)考试练习题及在线模拟考试

热门文章

  1. 2、oracle全文检索
  2. GPS定位基本原理浅析
  3. Mac 更新系统后无法正常启动
  4. 安卓开发:WebView无法播放微信视频
  5. mysql存储图片node_Node.js教程 阿里云mysql如何支持存储emoji表情
  6. 原本在滴滴只负责批100万元以上开支的Leslie决定,ofo所有30万元以上的开支都要由她亲自过目。那段时间,他“天天晚上12点才下班,眼睛都熬红了”...
  7. 【渝粤教育】电大中专跨境电子商务理论与实务 (13)作业 题库
  8. 电脑卡修复计算机有用吗,电脑卡重装系统有用吗|电脑太卡可以重装系统解决吗...
  9. [Python]This probably means that Tcl wasn‘t installed properly.(Windows 10)(pyinstaller库)
  10. Android渐变遮罩