卡碼網25題——掌握ACM輸入輸出方式(15 至 18)

刷題小記:

本期涉及ACM模式下棧和鏈表的構建與使用,值得學習。

卡瑪網15.神秘字符(卡瑪網15.神秘字符)

題目分析:

若給定2行字符串,其中第一個串的長度為偶數,現要求把第二個串插入到第一個串的正中央并輸出。

輸入數據首先給出一個整數n,表示測試數據的組數,每組2行,每行一個字符串,長度大于0小于50,每組第一行的字符串的長度必為偶數。

輸出時每組輸出占一行即可。

解題思路:

分組讀入,借助StringBuilder構造。

import java.util.*;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNext()) { // 處理多組輸入int n = in.nextInt();in.nextLine(); // 消耗換行符while (n-- > 0) {String s1 = in.nextLine();String s2 = in.nextLine();StringBuilder sb = new StringBuilder(s1);sb.insert(sb.length() / 2, s2);System.out.println(sb.toString());}}in.close();}
}

卡碼網16.位置互換(卡碼網16.位置互換)

題目分析:

輸入包含多組測試數據,第一行是一個整數n,表示有且只有n組測試數據,每組測試數據為一行長度為偶數的字符串(串長不超過50)。

請為每組測試數據輸出奇偶位互換后的結果,每組輸出占一行。

解題思路:

借助StringBuilder進行構造,每2個字符一對遍歷字符串,每對字符使用Swap進行交換(添入StringBuilder的次序交換)。

import java.util.*;
public class Main{public static void main(String[] args) {Scanner in = new Scanner(System.in);while(in.hasNext()) {int n = in.nextInt();in.nextLine();// 消耗換行符while(n-- > 0) {String s = in.nextLine();StringBuilder sb = new StringBuilder();for(int i = 0; i < s.length(); i+=2) {sb.append(s.charAt(i+1));sb.append(s.charAt(i));}System.out.println(sb.toString());}}in.close();}
}

卡瑪網17.出棧合法性(卡瑪網17.出棧合法性)

題目分析:

已知自然數1,2,......,N(1 <= N <= 100)依次入棧,請問接下來的各組序列是否為合法的出棧序列。

輸入包含多組測試數據。每組測試數據的第一行為整數N,當N = 0時輸入結束;第二行為N個正整數,以空格隔開,為出棧序列。

輸出Yes或No表示每組出棧序列是否合法。

解題思路:

觀察示例可以發現:出棧序列并非先將所有1~N的自然數入棧后再出棧,而是邊入棧邊適時按出棧序列出棧。

  1. 以3 4 2 1 5為例:
    • 1入棧,2入棧,3入棧,3出棧—— 12
    • 4入棧,4出棧—— 12
    • 2出棧—— 1
    • 1出棧—— 棧空
    • 5入棧,5出棧——棧空
  • 這是合法的。
  1. 以3 5 1 4 2為例:
    • 1入棧,2入棧,3入棧,3出棧—— 12
    • 4入棧,5入棧,5出棧—— 124
    • 1出棧——124,棧頂為4,無法實現
  • 這是不合法的。

解題步驟:

觀察兩個示例可以發現解題步驟如下:

  • 將i屬于1~N的自然數依次入棧,且從j = 0處開始遍歷出棧序列
  • 每次先將i入棧,再循環檢查棧頂元素top與出棧序列下標j處的curNum
    • 若相同,則top出棧,j++
    • 若不相同,結束循環
  • 入棧序列全部完畢,棧不為空,那么結果為No。
import java.util.*;
public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);while(in.hasNext()){int N = in.nextInt();if (N == 0) break;in.nextLine();// 消耗換行符String[] popList = in.nextLine().split(" ");String res;Deque<Integer> stack = new ArrayDeque<>();for(int i = 1, j = 0; i <= N; i++) {stack.push(i);// 依次入棧while(j < N && !stack.isEmpty()) {// 依次出棧int top = stack.peek();int curNum = Integer.parseInt(popList[j]);if (top == curNum) {stack.pop();j++;} else {break;}}}if (stack.isEmpty()) res = "Yes";else res = "No";System.out.println(res);}in.close();}
}

卡碼網18.鏈表的基本操作(卡碼網18.鏈表的基本操作)

題目分析:

按要求實現鏈表及其基本操作

輸入描述:

輸入數據只有一組,第一行有n+1個整數,第一個整數是這行余下的整數數目n,后面是n個整數,用于初始化鏈表,且輸入的順序與鏈表中的順序相反。

第二行有一個整數m,表示接下來有m行,每行有一個字符串代表對鏈表的操作。

輸出描述:

每個操作的含義及其對應的輸出如下:

  1. "get",代表獲得第a個元素(a從1開始計數)
    1. 獲取成功則輸出該元素
    2. 獲取失敗則輸出"get fail"
  1. "delete",代表刪除第a個元素(a從1開始計數)
    1. 刪除成功則輸出"delete OK"
    2. 刪除失敗則輸出"delete fail"
  1. "insert",其后跟著兩個用空格隔開的整數a和e,代表在第a個位置前面插入e(a從1開始計數)
    1. 插入成功則輸出"insert OK"
    2. 插入失敗則輸出"insert fail"
  1. "show",直接打印鏈表全部內容
    1. 鏈表不為空,用空格間隔輸出鏈表中的全部元素
    2. 鏈表為空,輸出"Link list is empty"

解題思路:

頭插法實現倒序插入。

按要求初始化自定義鏈表的數據結構及其操作。

注意

  • insert方法在a為鏈表長度加1時,表示在鏈表末尾插入,若a超過此值,則插入失敗。
  • insert方法和delete方法可能改變頭節點,需特殊處理(或者給鏈表增設虛擬頭節點dumpyHead以解決該問題)
import java.util.*;
public class Main{static class ListNode{int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;this.next = null;}public ListNode(ListNode next) {this.next = next;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}}static class MyLinkedList{ListNode head;public MyLinkedList() {this.head = null;};public void add(int val) {// 頭插法實現倒序地添加元素head = new ListNode(val, head);}public String get(int a) {ListNode cur = head;int num = 1;while(cur.next != null && num != a) {cur = cur.next;num++;}if (num == a) return Integer.toString(cur.val);else return "get fail";}public String delete(int a) {if (a == 1) {// 特殊處理a為1時的情況,更新頭節點if (head != null) {head = head.next;return "delete OK";}else {return "delete fail";}}ListNode pre = new ListNode(head);int num = 1;while(pre.next != null && num != a) {pre = pre.next;num++;}if (pre.next != null && num == a) {pre.next = pre.next.next;return "delete OK";}else {return "delete fail";}}public String insert(int a, int e) {if (a == 1) {// 特殊處理a為1時的情況,更新頭節點if (head == null) {head = new ListNode(e);} else {head = new ListNode(e, head);}return "insert OK";}ListNode pre = new ListNode(head);int num = 1;while(pre.next != null && num != a) {pre = pre.next;num++;}if (num == a) {pre.next = new ListNode(e, pre.next);return "insert OK";} else {return "insert fail";}}public String show() {StringBuilder sb = new StringBuilder();ListNode cur = head;while(cur != null) {if (cur != head) sb.append(" ");sb.append(cur.val);cur = cur.next;}if (sb.length() > 0) return sb.toString();else return "Link list is empty";}}public static void main(String[] args) {Scanner in = new Scanner(System.in);MyLinkedList list = new MyLinkedList();while(in.hasNext()) {int n = in.nextInt();while(n-- > 0) {int val = in.nextInt();list.add(val);}int m = in.nextInt();in.nextLine();// 消耗換行符while(m-- > 0) {String[] opt = in.nextLine().split(" ");switch (opt[0]) {case "get":System.out.println(list.get(Integer.parseInt(opt[1])));break;case "delete":System.out.println(list.delete(Integer.parseInt(opt[1])));break;case "insert":System.out.println(list.insert(Integer.parseInt(opt[1]), Integer.parseInt(opt[2])));break;case "show":System.out.println(list.show());break;default:break;}}}in.close();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898329.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端字段名和后端不一致?解鎖 JSON 映射的“隱藏規則” !!!

&#x1f680; 前端字段名和后端不一致&#xff1f;解鎖 JSON 映射的“隱藏規則” &#x1f31f; 嘿&#xff0c;技術冒險家們&#xff01;&#x1f44b; 今天我們要聊一個開發中常見的“坑”&#xff1a;前端傳來的 JSON 參數字段名和后端對象字段名不一致&#xff0c;會發生…

python中使用單例模式在整個程序中只創建一個數據庫連接,節省資源

示例代碼&#xff1a; from loguru import logger from pymongo import MongoClient from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None Nonedef __new__(cls, *args,…

AI小白的第六天:必要的數學知識(一)

在學習的過程中&#xff0c;不管是上代碼還是理論學習&#xff0c;其中都摻雜了一些數學知識。俗話說“磨刀不誤砍柴工”&#xff0c;而我已經“誤了砍柴功”了&#xff0c;現在變成了“亡羊補牢&#xff0c;為時不晚”。 線性代數 線性代數是數學的一個分支&#xff0c;主要…

【Linux】Bash是什么?怎么使用?

李升偉 整理 什么是 Bash&#xff1f; Bash&#xff08;Bourne Again Shell&#xff09;是一種 命令行解釋器&#xff08;Shell&#xff09;&#xff0c;廣泛用于 Unix 和 Linux 操作系統。它是 Bourne Shell&#xff08;sh&#xff09; 的增強版&#xff0c;提供了更多的功能…

Qt Creator入門

1.創建項目 選擇創建項目-Application&#xff08;Qt&#xff09;-Qt Widgets Application-修改名稱即可 默認創建有窗口類&#xff0c;myWidget,基類有三種選擇&#xff1a;QWidget&#xff0c;QMainWindow&#xff0c;QDialog 注意&#xff1a; 名稱和創建路徑不能有中文、…

C語言經典代碼練習題

1.輸入一個4位數&#xff1a;輸出這個輸的個位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("輸入一個&#xff14;位數&#xff1a;");scanf("%d",&a);printf("個位&#xff1a;%d\n"…

cls(**dict(data, id=id))靈活地從一個字典生成實例,同時確保某些關鍵字段(如 id)被正確設置或覆蓋

示例代碼&#xff1a; classmethoddef from_mongo(cls: Type[T], data: dict) -> T:"""Convert "_id" (str object) into "id" (UUID object)."""if not data:raise ValueError("Data is empty.")id data.pop…

MyBatis XMLMapperBuilder 是如何將 SQL 語句解析成可執行的對象? 如何將結果映射規則解析成對應的處理器?

1. XMLMapperBuilder 如何將 SQL 語句解析成可執行對象 (MappedStatement): XMLMapperBuilder 解析 <select>, <insert>, <update>, <delete> 等 SQL 語句元素時&#xff0c;并不僅僅是簡單地讀取 SQL 文本&#xff0c;而是要將 SQL 語句和相關的配置…

咖啡點單小程序畢業設計(JAVA+SpringBoot+微信小程序+完整源碼+論文)

?全網粉絲20W,csdn特邀作者、博客專家、CSDN新星計劃導師、java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取項目下載方式&#x1f345; 一、項目背景介紹&#xff1a; 隨著社會的快速發展和…

003-掌控命令行-CLI11-C++開源庫108杰

首選的現代C風格命令行參數解析器! &#xff08;本課程包含兩段教學視頻。&#xff09; 以文件對象監控程序為實例&#xff0c;五分鐘實現從命令行讀入多個監控目標路徑&#xff1b;區分兩大時機&#xff0c;學習 CLI11 構建與解析參數兩大場景下的異常處理&#xff1b;區分三…

【leetcode hot 100 124】二叉樹中的最大路徑和

解法一&#xff1a;&#xff08;遞歸&#xff09;考慮實現一個簡化的函數 maxGain(node)&#xff0c;該函數計算二叉樹中的一個節點的最大貢獻值&#xff0c;具體而言&#xff0c;就是在以該節點為根節點的子樹中尋找以該節點為起點的一條路徑&#xff0c;使得該路徑上的節點值…

譜分析方法

前言 本文隸屬于專欄《機器學習數學通關指南》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見《機器學習數學通關指南》 ima 知識庫 知識庫廣場搜索&#…

在圖像/視頻中裁剪出人臉區域

1. 在圖像中裁剪人臉區域 import face_alignment import skimage.io import numpy from argparse import ArgumentParser from skimage import img_as_ubyte from skimage.transform import resize from tqdm import tqdm import os import numpy as np import warnings warni…

【軟考-架構】11.3、設計模式-新

?資料&文章更新? GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目錄 項目中的應用設計模式創建型設計模式結構型設計模式行為型設計模式 &#x1f4af;考試真題題外話 項目中的應用 在實際項目中&#xff0c;我應用過多種設計模式來解決不同…

使用Redis如何實現分布式鎖?(超賣)

分布式鎖概念 在多線程環境下&#xff0c;為了保證數據的線程安全&#xff0c;鎖保證同一時刻&#xff0c;只有一個可以訪問和更新共享數據。在單機系統我們可以使用 synchronized 鎖、Lock 鎖保證線程安全。 synchronized 鎖是 Java 提供的一種內置鎖&#xff0c;在單個 JVM …

Linux的Shell編程

一、什么是Shell 1、為什么要學習Shell Linux運維工程師在進行服務器集群管理時&#xff0c;需要編寫Shell程序來進行服務器管理。 對于JavaEE和Python程序員來說&#xff0c;工作的需要。Boss會要求你編寫一些Shell腳本進行程序或者是服務器的維護&#xff0c;比如編寫一個…

使用React和google gemini api 打造一個google gemini應用

實現一個簡單的聊天應用&#xff0c;用戶可以通過輸入問題或點擊“Surprise me”按鈕獲取隨機問題&#xff0c;并從后端API獲取回答。 import { useState } from "react"; function App() {const [ value, setValue] useState(""); // 存儲用戶輸入的問題…

深入探討TK矩陣系統:創新的TikTok運營工具

TK矩陣的應用場景 TK矩陣系統適用于多個場景&#xff0c;尤其是在以下幾個方面有顯著優勢&#xff1a; 批量賬號管理與內容發布&#xff1a;對于需要管理多個TikTok賬號的內容創作者或營銷人員&#xff0c;TK矩陣提供了高效的賬號管理工具&#xff0c;支持批量發布視頻、評論、…

MTK Android12 應用在最頂端時,禁止拉起其他某個應用(一)

1、需求 近期&#xff0c;客戶要求應用在最頂端時&#xff0c;禁止拉起其他某個應用2、解決方法 diff --git a/frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java b/frameworks/base/services/core/java/com/android/server/wm/ActivityStarte…

論文閱讀筆記:Deep Unsupervised Learning using Nonequilibrium Thermodynamics

1、來源 論文連接1&#xff1a;http://ganguli-gang.stanford.edu/pdf/DeepUnsupDiffusion.pdf 論文連接2(帶appendix)&#xff1a;https://arxiv.org/pdf/1503.03585v7 代碼鏈接&#xff1a;https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models 代碼的環境配置…