谁没交卷
华为OD机试新系统真题 华为OD上机考试新系统真题 7月15号 100分题型
华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解
题目内容
张老师组织了一场线上模拟考试,并要求考生使用学号登录网站进行考试。考试完成后张老师发现试卷提交不全,他需要找到哪些同学没有交卷。
若班级内有N NN个学生,则学号从1 11开始到N NN结束,每个学生一个学号。一个班级内学生个数不超过80 8080,即0 < N ≤ 80 0 < N \leq 800<N≤80。
请你编写一个程序,帮助张老师快速找到哪些学号的学生没有交卷。
输入描述
- 班级内学生数量。
- 交卷学生的学号列表,由于是按照交卷时间排序的,学号是乱序的,同时本题确保学号是合法的,不存在小于1 11或大于N NN的学号。
输出描述
- 未交卷学生的学号列表,按照学号升序排列。
样例1
输入
10 1,5,3,2,6,7,8,9,10输出
4说明
班级内共有 10 人,学号 1-10,学号为 4 的学生没有交卷,因此返回[4]。
样例2
输入
10 9,2,3,5,6,7输出
1,4,8,10说明
班级内共有 10 人,学号 1-10,学号为 1,4,8,10 的学生没有交卷,因此返回[1,4,8,10]。
样例3
输入
10 9,1,2,4,5,3,7,8,6,10输出
说明
班级内共有 10 人,学号 1-10,所有学生均进行了交卷,因此返回 。
题解
思路:模拟
- 根据n创建一个大小为
n + 1,记录指定学号是否出现过。初始全部初始化为未出现过。 - 遍历交卷学号,将对应学号标记为已出现。
- 从前往后遍历[1, n]如果指定学号未出现加入结果数组中即可。
c++
#include<bits/stdc++.h>#include<string>#include<vector>usingnamespacestd;// 通用 切割函数 函数 将字符串str根据delimiter进行切割vector<int>split(conststring&str,conststring&delimiter){vector<int>result;size_t start=0;size_t end=str.find(delimiter);while(end!=string::npos){result.push_back(stoi(str.substr(start,end-start)));start=end+delimiter.length();end=str.find(delimiter,start);}// 添加最后一个部分result.push_back(stoi(str.substr(start)));returnresult;}vector<int>queryNoSubmit(intn,vector<int>&submitID){// 记录是否出现vector<int>flag(n+1,false);for(autoid:submitID){flag[id]=true;}vector<int>ans;// 未出现从前往后加入结果for(inti=1;i<=n;i++){if(!flag[i]){ans.push_back(i);}}returnans;}intmain(){intn;cin>>n;cin.ignore();string input;getline(cin,input);vector<int>submitID;if(!input.empty()){submitID=split(input,",");}vector<int>ans=queryNoSubmit(n,submitID);for(inti=0;i<ans.size();i++){if(i>0){cout<<",";}cout<<ans[i];}return0;}Java
importjava.util.*;publicclassMain{staticList<Integer>queryNoSubmit(intn,List<Integer>submitID){// 记录是否出现boolean[]flag=newboolean[n+1];for(intid:submitID){flag[id]=true;}List<Integer>ans=newArrayList<>();// 未出现从前往后加入结果for(inti=1;i<=n;i++){if(!flag[i]){ans.add(i);}}returnans;}publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=Integer.parseInt(sc.nextLine());Stringinput="";if(sc.hasNextLine()){input=sc.nextLine();}List<Integer>submitID=newArrayList<>();if(!input.isEmpty()){String[]strs=input.split(",");for(Strings:strs){submitID.add(Integer.parseInt(s));}}List<Integer>ans=queryNoSubmit(n,submitID);StringBuildersb=newStringBuilder();for(inti=0;i<ans.size();i++){if(i>0){sb.append(",");}sb.append(ans.get(i));}System.out.print(sb.toString());}}Python
defqueryNoSubmit(n,submitID):# 记录是否出现flag=[False]*(n+1)forxinsubmitID:flag[x]=Trueans=[]# 未出现从前往后加入结果foriinrange(1,n+1):ifnotflag[i]:ans.append(str(i))returnans n=int(input())try:s=input().strip()exceptEOFError:s=""submitID=[]ifs:submitID=list(map(int,s.split(",")))print(",".join(queryNoSubmit(n,submitID)))JavaScript
constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});constinput=[];rl.on("line",function(line){input.push(line);});rl.on("close",function(){constn=parseInt(input[0]);conststr=input.length>1?input[1]:"";constsubmitID=[];if(str.length>0){constarr=str.split(",");for(constsofarr){submitID.push(parseInt(s));}}// 记录是否出现constflag=newArray(n+1).fill(false);for(constidofsubmitID){flag[id]=true;}constans=[];// 未出现从前往后加入结果for(leti=1;i<=n;i++){if(!flag[i]){ans.push(i);}}console.log(ans.join(","));});Go
packagemainimport("bufio""fmt""os""strconv""strings")funcqueryNoSubmit(nint,submitID[]int)[]int{// 记录是否出现flag:=make([]bool,n+1)for_,id:=rangesubmitID{flag[id]=true}varans[]int// 未出现从前往后加入结果fori:=1;i<=n;i++{if!flag[i]{ans=append(ans,i)}}returnans}funcmain(){reader:=bufio.NewReader(os.Stdin)varnintfmt.Fscan(reader,&n)reader.ReadString('\n')line,_:=reader.ReadString('\n')line=strings.TrimSpace(line)varsubmitID[]intifline!=""{arr:=strings.Split(line,",")for_,s:=rangearr{x,_:=strconv.Atoi(s)submitID=append(submitID,x)}}ans:=queryNoSubmit(n,submitID)fori,v:=rangeans{ifi>0{fmt.Print(",")}fmt.Print(v)}}C语言
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdbool.h>int*queryNoSubmit(intn,int*submitID,intsubmitSize,int*returnSize){// 记录是否出现bool*flag=(bool*)calloc(n+1,sizeof(bool));for(inti=0;i<submitSize;i++){flag[submitID[i]]=true;}int*ans=(int*)malloc(sizeof(int)*n);*returnSize=0;// 未出现从前往后加入结果for(inti=1;i<=n;i++){if(!flag[i]){ans[(*returnSize)++]=i;}}free(flag);returnans;}intmain(){intn;scanf("%d",&n);getchar();charline[10005];intsubmitID[10005];intsubmitSize=0;if(fgets(line,sizeof(line),stdin)!=NULL){line[strcspn(line,"\r\n")]='\0';if(strlen(line)>0){char*token=strtok(line,",");while(token!=NULL){submitID[submitSize++]=atoi(token);token=strtok(NULL,",");}}}intreturnSize;int*ans=queryNoSubmit(n,submitID,submitSize,&returnSize);for(inti=0;i<returnSize;i++){if(i>0){printf(",");}printf("%d",ans[i]);}free(ans);return0;}