尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

8.5华为OD机试真题 新系统 - 智能广播合并台号 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - 智能广播合并台号 (Java/Py/C/C++/Js/Go) 智能广播合并台号2026 华为OD机试真题 8月5日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述某社区有多条广播线路每条线路用一个大写英文字母编号表示 (A-Z)。当发送广播时为减少操作次数会将连续相邻编号且满足一定个数的线路合并为一个区间用“起始编号-结束编号”的简写形式表示不连续或不满足个数的线路则单独列出。合并后的结果要求按字母升序排列各项之间用一个逗号分隔。具体合并规则如下若连续的线路编号个数 ≥3 个则合并为一个区间格式为 起始-结束如 B-F 表示 B、C、D、E、F 五条线路若连续线路编号个数 2 个不合并仍各自单独列出如 AB 两个编号写成 A,B若连续线路编号个数 1 个单独列出如 G不连续的线路之间各自处理互不影响输入描述第一行输入整数n表示需要广播的线路条数。第二行输入n个大写字母空格分隔表示发送广播的线路编号。字母可能重复但合并时每个编号只计一次。输出描述输出一个字符串表示合并后的广播线路列表按字母升序排列项间用逗号分隔。约束1≤n≤26字母范围为A-Z仅大写。输入字母可能有重复需去重后排序再合并。示例1输入6 G B A F D C输出A-D,F,G说明字母去重排序后为 A B C D F G。其中 A-D 连续 4 个≥3合并为 A-DF 和 G 相邻但仅 2 个不合并写成 F,G。最终结果 A-D,F,G。示例2输入3 A C B输出A-C说明字母排序后为 ABC三字母连续个数3≥3合并为 A-C。示例3输入4 A A B B输出A,B说明去重后仅剩 AB虽然相邻但只有 2 个字母不满足 ≥3 的合并条件因此各自单独列出。解题思路核心思想先去重并排序再按字母顺序扫描。只要当前一段是连续字母就向后扩展段长达到 3 及以上时压缩成起始-结束否则逐个输出。算法步骤读取n和第二行的字母列表。用集合去重再排序。从左到右扫描排序后的字母数组找到每一段连续区间。若区间长度大于等于 3输出首字母-尾字母否则逐个字母输出。各片段用逗号连接。复杂度分析设去重后字母个数为m则m 26。时间复杂度O(n log n)主要来自排序。空间复杂度O(n)用于存储去重后的字母。Javaimportjava.util.*;publicclassMain{staticStringsolve(intn,String[]letters){// 去重并排序后续只需要扫描连续区间TreeSetCharactersetnewTreeSet();for(Strings:letters){if(!s.isEmpty()){set.add(s.charAt(0));}}ListCharactercharsnewArrayList(set);ListStringresultnewArrayList();inti0;while(ichars.size()){intji;// 找到一个连续递增区间while(j1chars.size()chars.get(j1)chars.get(j)1){j;}if(j-i13){result.add(chars.get(i)-chars.get(j));}else{for(intki;kj;k){result.add(String.valueOf(chars.get(k)));}}ij1;}returnString.join(,,result);}publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);intnscanner.hasNextInt()?scanner.nextInt():0;String[]lettersnewString[n];for(inti0;in;i){letters[i]scanner.next();}System.out.println(solve(n,letters));}}Pythondefsolve(n,channels):# 去重排序后只需按连续字母段进行合并charssorted(set(channels))result[]i0whileilen(chars):jiwhilej1len(chars)andord(chars[j1])ord(chars[j])1:j1ifj-i13:result.append(f{chars[i]}-{chars[j]})else:forkinrange(i,j1):result.append(chars[k])ij1return,.join(result)nint(input().strip()or0)channelsinput().split()print(solve(n,channels))JavaScriptconstreadlinerequire(readline);functionsolve(n,channels){// 先去重排序再扫描连续区间constcharsArray.from(newSet(channels)).sort();constresult[];leti0;while(ichars.length){letji;while(j1chars.lengthchars[j1].charCodeAt(0)chars[j].charCodeAt(0)1){j;}if(j-i13){result.push(${chars[i]}-${chars[j]});}else{for(letki;kj;k){result.push(chars[k]);}}ij1;}returnresult.join(,);}constrlreadline.createInterface({input:process.stdin,output:process.stdout});constlines[];rl.on(line,linelines.push(line));rl.on(close,(){constnlines.length0?Number(lines[0].trim()):0;constchannelslines.length1?lines[1].trim().split(/\s/).filter(Boolean):[];console.log(solve(n,channels));});C#includebits/stdc.husingnamespacestd;stringsolve(intn,constvectorcharletters){// 去重后排序再按连续段压缩输出vectorcharcharsletters;sort(chars.begin(),chars.end());chars.erase(unique(chars.begin(),chars.end()),chars.end());vectorstringresult;inti0;while(i(int)chars.size()){intji;while(j1(int)chars.size()chars[j1]chars[j]1){j;}if(j-i13){string t;t.push_back(chars[i]);t.push_back(-);t.push_back(chars[j]);result.push_back(t);}else{for(intki;kj;k){result.push_back(string(1,chars[k]));}}ij1;}string ans;for(intidx0;idx(int)result.size();idx){if(idx)ans.push_back(,);ansresult[idx];}returnans;}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cinn;vectorcharletters;for(inti0;in;i){string s;cins;letters.push_back(s[0]);}coutsolve(n,letters)endl;return0;}Gopackagemainimport(bufiofmtossortstrings)funcsolve(nint,channels[]string)string{// 去重并排序之后只处理连续字母段set:map[string]struct{}{}for_,ch:rangechannels{ifch!{set[ch]struct{}{}}}chars:make([]string,0,len(set))forch:rangeset{charsappend(chars,ch)}sort.Strings(chars)result:make([]string,0)i:0forilen(chars){j:iforj1len(chars)chars[j1][0]chars[j][0]1{j}ifj-i13{resultappend(result,chars[i]-chars[j])}else{fork:i;kj;k{resultappend(result,chars[k])}}ij1}returnstrings.Join(result,,)}funcmain(){reader:bufio.NewReader(os.Stdin)varnintfmt.Fscan(reader,n)channels:make([]string,0,n)fori:0;in;i{varsstringfmt.Fscan(reader,s)channelsappend(channels,s)}fmt.Println(solve(n,channels))}C语言#includestdio.h#includestdlib.h#includestring.hintcmpChar(constvoid*a,constvoid*b){return(*(constchar*)a)-(*(constchar*)b);}char*solve(intn,charchannels[][4]){// 去重排序后再把连续字母段压缩成区间staticcharunique[26];intm0;for(inti0;in;i){charcchannels[i][0];intfound0;for(intj0;jm;j){if(unique[j]c){found1;break;}}if(!found)unique[m]c;}qsort(unique,m,sizeof(char),cmpChar);staticcharans[256];ans[0]\0;intfirst1;inti0;while(im){intji;while(j1munique[j1]unique[j]1)j;charbuf[16];if(j-i13){sprintf(buf,%c-%c,unique[i],unique[j]);if(!first)strcat(ans,,);strcat(ans,buf);first0;}else{for(intki;kj;k){sprintf(buf,%c,unique[k]);if(!first)strcat(ans,,);strcat(ans,buf);first0;}}ij1;}returnans;}intmain(){intn;if(scanf(%d,n)!1)return0;charchannels[26][4];for(inti0;in;i){scanf(%3s,channels[i]);}printf(%s\n,solve(n,channels));return0;}完整用例用例16 G B A F D C用例23 A C B用例34 A A B B用例41 Z用例52 M N用例63 X Y Z用例78 A B C E F H I J用例810 A B B C D E F G H I用例95 A C E G I用例1026 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z文章目录**智能广播合并台号**题目描述输入描述输出描述示例1示例2示例3解题思路核心思想算法步骤复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10
返回列表