華為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.在字串中找出...