华为OJ题目 -- 初级篇(机试OJ平台)
来源:互联网 发布:js权威指南第七版pdf 编辑:程序博客网 时间:2024/05/01 14:05
华为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[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}
system_task[] = {0, 3, 1, 7, -1}
user_task[] = {4, 8, 2, 6, -1}
代码:
OJ.CPP
#include <stdio.h>#include <string.h>#include "oj.h"void bubble_sort(struct elem *src, int len){ int i,j; int temp; int flag =1; for(i=0;i<=len-2 && flag;i++) { flag = 0; for(j=0; j<=len-2-i; j++) { if(src[j].val > src[j+1].val) { temp = src[j].val; src[j].val = src[j+1].val; src[j+1].val = temp; temp = src[j].index; src[j].index = src[j+1].index; src[j+1].index = temp; flag = 1; } } }}void choose_sort(struct elem *src, int len){ int i,j; int ch; int temp; for(i=0;i<=len-2;i++) { ch=i; for(j=i+1; j<=len-1; j++) { if(src[ch].val > src[j].val) ch = j; } if(i != ch) { temp = src[ch].val; src[ch].val = src[i].val; src[i].val = temp; temp = src[ch].index; src[ch].index = src[i].index; src[i].index = temp; } }}void scheduler(int task[], int len, int system_task[], int user_task[]){ struct elem small[100]; struct elem big[100]; int i; int m=0,n=0; for(i=0; i<len; i++) { if(task[i]<0 || task[i]>255) continue; if(task[i]<50) { small[m].index = i; small[m].val = task[i]; m++; } else { big[n].index = i; big[n].val = task[i]; n++; } } bubble_sort(small,m); bubble_sort(big,n); for(i=0; i<m; i++) system_task[i] = small[i].index; system_task[m] = -1; for(i=0; i<n; i++) user_task[i] = big[i].index; user_task[n] = -1;}
OJ.H
#ifndef __OJ_H__#define __OJ_H__/*功能:输入:输出:返回:*/void scheduler(int task[], int n, int system_task[], int user_task[]);struct elem{ int val; int index;};#endif
从这里大家也可以熟悉一下OJ考试平台,平台测试比较严格,很多同学反映自己在VS上测试都通过,但是一上OJ就出问题,首先我要说的是,不要怀疑OJ,毕竟很多人都过了,要坚信你代码要么写的不规范,要么入口或其他条件未判断。
这个题目比较坑,一开始我用选择排序,妈蛋的,居然在比如用例为:
int task[] = {255,255,0,-1,256,2,138}; 255,255的下标会交换,不得已改为冒泡好了。
题目二:
我国公民的身份证号码特点如下:
1、 长度为18位;
2、 第1~17位只能为数字;
3、 第18位可以是数字或者小写英文字母x。
4、 身份证号码的第7~14位表示持有人生日的年、月、日信息。
例如:511002198808080111或51100219880808011x。
请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于1900年,小于等于2100年。
需要考虑闰年、大小月的情况。所谓闰年,能被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 <stdio.h>#include <string.h>#include "oj.h"int str2num(char *src, int len){ int i; int res=0; int flag = 1; for(i=len-1; i>=0; i--) { res+= (src[i]-'0')*flag; flag *= 10; } return res;}int verifyIDCard(char *input){ int i=0; int year,month,day; int len = strlen(input); if(len!=18) return 1; for(i=0;i<17;i++) { if(input[i]<'0' || input[i]>'9') return 2; } 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) { if((year%4 == 0)&&(year%100 != 0) || (year%400 == 0)) { if(day>29) return 6; } else { if(day>28) return 6; } } return 0;}
题目三:
判断输入的字符串是不是一个有效的IP地址
详细描述:
请实现如下接口
boolisIPAddressValid(constchar* pszIPAddr)
输入:pszIPAddr 字符串
输出:true 有效的IP地址,false,无效的IP地址
约束
输入IP为XXX.XXX.XXX.XXX格式
字符串两端含有空格认为是合法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){ int res=0; int f = 1; int i=0; for(i=len-1; i>=0; i--) { res = res + (s[i] - '0')*f; f = f*10; } return res;}bool isIPAddressValid(const char* pszIPAddr){ // 请在此处实现 int len=0,i=0,j=0,k=0; int count=0; char src[100] = {0}; char s[10]={0}; // 如果不加 就出现运行错误,他妈的 if(pszIPAddr == 0 || pszIPAddr == "") return false; while(pszIPAddr[len]) { src[len] = pszIPAddr[len]; len++; } src[len] = '\0'; for(i=0;i<len;i++) { if((i==0 || i==len-1)&&(src[i] == ' ')) continue; if((src[i]<'0' || src[i] >'9')&& (src[i]!='.'&& src[i]!=' ')) return false; s[j++] = src[i]; if(src[i] == '.') { count++; if(src[i+1] == '.' || src[i+1] == '\0') return false; if(j>4) return false; if(j>2 && s[0] == '0') return false; for(k=0;k<j-1;k++) { if(s[k] == ' ') return false; } if(j==4) { if(string2int(s,3) > 255) return false; } j=0; } } if(count!=3) return false; return true;}
- 华为OJ题目 -- 初级篇(机试OJ平台)
- 华为OJ题目 -- 初级篇(武研所平台)
- 华为oj初级题目——合唱队
- 华为OJ平台题目:(练习用)挑7
- 华为OJ平台题目:火车进站
- 华为OJ平台题目:蛇形矩阵
- 华为OJ平台题目->砝码重量
- 华为OJ 初级:等差数列
- 华为OJ 初级:记负均正
- 华为OJ 初级:多线程
- 华为OJ 初级:合唱队
- 华为OJ 初级 合唱队
- 华为oj初级 记负均正
- 华为oj初级 等差数列
- 华为OJ 初级:201301 JAVA题目0-1级
- 华为oj初级 201301 JAVA题目0-1级
- 华为OJ之初级篇Ⅰ
- 华为OJ之初级篇Ⅱ
- Oracle database wrc执行报错ORA-15557
- 连接Oracle、登录Linux速度缓慢
- poj 2253 Frogger (spfa) (Floyd)
- java中collection 和collections的区别
- JavaScript中的Array对象方法调用
- 华为OJ题目 -- 初级篇(机试OJ平台)
- 进程的同步与互斥
- css中em与px的区别
- [LeetCode][Java] Remove Duplicates from Sorted List II
- ArcGIS标注引擎导致ArcEngine中标注不显示
- 图片轮播器(UIScrollView-UIPageControl)
- Valid Palindrome
- hdu5285黑白染色二分最大匹配
- VC++6.0怎么编译Debug版本和Release版本。