華為OJ題目 初級篇(機試OJ平台)

2021-07-03 22:10:48 字數 3503 閱讀 2681

華為oj初級篇是本人蒐集的一些題目,都run過ok,初級題我個人感覺必要在15-20min以內完成,不然時間不夠用,一共三道,後兩道中高階題目。

題目一:

作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 < 50,使用者任務的優先順序 >= 50且 <= 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越 高。

函式介面 void scheduler(int task, int n, int system_task, int user_task)

函式scheduler實現如下功能:

將task 中的任務按照系統任務、使用者任務依次存放到 system_task 陣列和 user_task 陣列中(陣列中元素的值是任務在task 陣列中的下標),

並且優先順序高的任務排在前面,陣列元素為-1表示結束。

例如:task =

system_task =

user_task =

**:

oj.cpp

#include

#include

#include

"oj.h"

void bubble_sort(struct elem *src, int len)}}

}void choose_sort(struct elem *src, int len)

if(i != ch)

}}void scheduler(int task, int len, int system_task, int user_task)

else

}bubble_sort(small,m);

bubble_sort(big,n);

for(i=0; i1;

for(i=0; i1;

}

oj.h

#ifndef __oj_h__

#define __oj_h__

/*功能:

輸入:輸出:

返回:*/

void scheduler(int task, int n, int system_task, int user_task);

struct elem;

#endif

從這裡大家也可以熟悉一下oj考試平台,平台測試比較嚴格,很多同學反映自己在vs上測試都通過,但是一上oj就出問題,首先我要說的是,不要懷疑oj,畢竟很多人都過了,要堅信你**要麼寫的不規範,要麼入口或其他條件未判斷。

這個題目比較坑,一開始我用選擇排序,媽蛋的,居然在比如用例為:

int task = ; 255,255的下標會交換,不得已改為冒泡好了。

題目二:

我國公民的身份證號碼特點如下:

1、 長度為18位;

2、 第1~17位只能為數字;

3、 第18位可以是數字或者小寫英文本母x。

4、 身份證號碼的第7~14位表示持有人生日的年、月、日資訊。

例如:511002198808080111或51100219880808011x。

請實現身份證號碼合法性判斷的函式。除滿足以上要求外,需要對持有人生日的年、月、日資訊進行校驗。年份大於等於2023年,小於等於2023年。

需要考慮閏年、大小月的情況。所謂閏年,能被4整除且不能被100整除 或 能被400整除的年份,閏年的2月份為29天,非閏年的2月份為28天。

其他情況的合法性校驗,考生不用考慮。

函式返回值:

1) 如果身份證號合法,返回0;

2) 如果身份證號長度不合法,返回1;

3) 如果身份證號第1~17位含有非數字的字元,返回2;

4) 如果身份證號第18位既不是數字也不是英文小寫字母x,返回3;

5) 如果身份證號的年資訊非法,返回4;

6) 如果身份證號的月資訊非法,返回5;

7) 如果身份證號的日資訊非法,返回6(請注意閏年的情況);

【注】除成功的情況外,以上其他合法性判斷的優先順序依次降低。也就是說,如果判斷出長度不合法,直接返回1即可,不需要再做其他合法性判斷。

要求實現函式:

int verifyidcard(char* input)

【輸入】 char* input,表示輸入的身份證號碼字串

【輸出】 無

【返回】 判斷的結果,型別為int

#include 

#include

#include "oj.h"

int str2num(char *src, int len)

return res;

}int verifyidcard(char *input)

if((input[17]<'0' || input[17] >'9') && (input[17] != 'x'))return

3; year = str2num(input+6,4);

month = str2num(input+10,2);

day = str2num(input+12,2);

if(year <1900 || year >2100) return

4; if(month<1||month>12) return

5; if(day<1||day>31) return

6; if(month==2)

else

}return

0;}

題目三:

判斷輸入的字串是不是乙個有效的ip位址

詳細描述:

請實現如下介面

boolisipaddressvalid(constchar* pszipaddr)

約束 輸入ip為***.***.***.***格式

字串兩端含有空格認為是合法ip

字串中間含有空格認為是不合法ip

類似於 01.1.1.1, 1.02.3.4 ip子段以0開頭為不合法ip

子段為單個0 認為是合法ip,0.0.0.0也算合法ip

#include "ipaddressvalid.h"

int string2int(char *s, int

len)

return res;

}bool isipaddressvalid(const char* pszipaddr)

; char s[10]=;

// 如果不加 就出現執行錯誤,他媽的

if(pszipaddr ==0 || pszipaddr == "") return

false;

while(pszipaddr[len])

src[len] = '\0';

for(i=0;iif(j==4)

j=0;}}

if(count!=3) return

false;

return

true;

}

華為OJ之初級篇

11.獎金提成 簡要描述 企業發放的獎金根據利潤提成。利潤低於或等於100000元的,獎金可提10 利潤高於100000元,低於200000元 100000 200000 時 低於100000元的部分按10 提成 高於100000元的部分,可提成7.5 200000 400000時,低於200000...

華為OJ之初級篇

21.數字統計 簡要描述 對輸入的整型陣列,輸出陣列元素中的最大值 最大值的個數 最小值和最小值的個數 詳細描述 介面說明 原型 voidoutputmaxandmin int pinputinteger,intinputnum,int pmaxvalue,int pmaxnum,int pminv...

華為OJ之初級篇

本文章旨在提供乙個互相學習和交流的平台,也作為oj刷題這段時光的記錄。本人非計算機科班出身,程式主要以實現功能性需求為主,暫不考慮效能 質量等因素。以下oj題目順序為成功通過機器驗證的順序,本篇題目全出自初級題系列。為了保證本文介面的簡潔性,以 片形式給出,見相關 答案點這裡 鏈結。1.在字串中找出...