分班問題 、幼兒園分班(C語言)

題目

幼兒園兩個班的小朋友排隊時混在了一起,每個小朋友都知道自己跟前面一個小朋友是不是同班,請你幫忙把同班的小朋友找出來
小朋友的編號為整數,與前面一個小朋友同班用Y表示,不同班用N表示

輸入

輸入為空格分開的小朋友編號和是否同班標志
比如 6/N 2/Y 3/N 4/Y
表示一共有4位小朋友
26是同班,32不同班,43同班
小朋友總數不超過999
0 < 每個小朋友編號 < 999
不考慮輸入格式錯誤

輸出

每一行記錄一班小朋友的編號 編號用空格分開
并且

  1. 編號需要按照大小升序排列,分班記錄中第一個編號小的排在第一行
  2. 如果只有一個班的小朋友 第二行為空
  3. 如果輸入不符合要求輸出字符串ERROR

示例一

輸入

1/N 2/Y 3/N 4/Y
1

輸出

1 2
3 4
12

說明

2的同班標記為Y因此和1同班
3的同班標記位N因此和1,2不同班
4的同班標記位Y因此和3同班

示例二

輸入

1/N 2/Y 3/N 4/Y 5/Y

輸出

1 2
3 4 5

思路

解題思路:

  1. 讀取輸入:首先通過fgets函數獲取用戶輸入的一行字符串,然后使用strtok函數將其按照空格分割成一個個包含編號和是否同班標志的token(例如:“1/N”、"2/Y"等),并將這些token存入臨時數組中。

  2. 初始化學生結構體數組:根據臨時數組中的信息,利用sscanf函數將每個token解析為小朋友的編號(id)和是否同班(isClass)標志,并存儲到Students結構體數組stu中。

  3. 判斷首位合法性:檢查首位小朋友是否與前一位小朋友同班。由于沒有前一位小朋友,若首位標記為“Y”,則輸入非法,輸出"ERROR"并結束程序。

  4. 分配班級:遍歷整個stu數組,對于每個小朋友:

    • 首位小朋友直接劃歸到班級1;
    • 若當前小朋友與前一位小朋友同班,則將其劃歸到前一位所在的班級;
    • 若當前小朋友與前一位小朋友不同班,則將其劃歸到另一個班級。

    在這個過程中,用兩個整數數組class1class2分別記錄兩個班級的小朋友編號。

  5. 排序輸出:對兩個班級數組進行升序排序,這里使用C標準庫提供的qsort函數進行快速排序。最后分別輸出兩個班級的小朋友編號,每個編號后面跟一個空格,第二個班級結束后輸出換行符。

代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000// 定義學生結構體,包含小朋友編號(id)、是否同班標志(isClass)以及所在班級(classId)
typedef struct {int id;char isClass[2];int classId; // 表示小朋友屬于一班還是二班
} Students;// 自定義排序函數,用于對整數數組進行升序排序
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }int main() {char input[3000]; // 輸入緩沖區,用于存儲用戶輸入的數據// 讀取一行用戶輸入,并移除末尾換行符fgets(input, 3000, stdin);input[strcspn(input, "\n")] = '\0';// 使用strtok函數分割輸入字符串為一個個token(小朋友編號和是否同班標志)char *token = strtok(input, " ");char tmp[MAX][10]; // 臨時存儲每個tokenint count = 0;     // 記錄當前讀取到的token數量while (token != NULL) {strcpy(tmp[count++], token); // 將token復制到臨時數組中token = strtok(NULL, " ");   // 繼續獲取下一個token}// 初始化學生結構體數組,并將讀取到的信息存入其中Students stu[MAX];for (int i = 0; i < count; i++) {sscanf(tmp[i], "%d/%s", &stu[i].id, stu[i].isClass);}// 檢查首位小朋友是否與前一位小朋友同班(實際上沒有前一位),若同班則輸入非法,輸出ERRORif (strcmp(stu[0].isClass, "Y") == 0) {printf("ERROR\n");return 0;}// 定義兩個數組分別存儲兩個班級的小朋友編號int class1[MAX], class2[MAX];int count1 = 0, count2 = 0; // 分別記錄兩個班級的人數// 遍歷所有小朋友信息,根據是否同班標志將他們分配到對應的班級數組中for (int i = 0; i < count; i++) {// 處理首位小朋友if (i == 0) {class1[count1++] = stu[i].id;stu[i].classId = 1; // 設置班級ID為1continue;}// 若當前小朋友與前一位小朋友同班,則將其劃分到同一班級if (strcmp(stu[i].isClass, "Y") == 0) {stu[i].classId = stu[i - 1].classId;// 根據班級ID將小朋友編號添加到對應的班級數組中if (stu[i].classId == 1) {class1[count1++] = stu[i].id;} else if (stu[i].classId == 2) {class2[count2++] = stu[i].id;}}// 若當前小朋友與前一位小朋友不同班,則將其劃分到另一個班級if (strcmp(stu[i].isClass, "N") == 0) {// 更新當前小朋友的班級ID,使其與前一位小朋友所在的班級不同if (stu[i - 1].classId == 1) {stu[i].classId = 2;} else if (stu[i - 1].classId == 2) {stu[i].classId = 1;}// 根據更新后的班級ID將小朋友編號添加到對應的班級數組中if (stu[i].classId == 1) {class1[count1++] = stu[i].id;} else if (stu[i].classId == 2) {class2[count2++] = stu[i].id;}}}// 對兩個班級數組分別進行升序排序qsort(class1, count1, sizeof(int), cmp);qsort(class2, count2, sizeof(int), cmp);// 輸出兩個班級的小朋友編號,每個編號后面跟一個空格for (int i = 0; i < count1; i++) {printf("%d ", class1[i]);}printf("\n"); // 換行輸出第二個班級for (int i = 0; i < count2; i++) {printf("%d ", class2[i]);}return 0;
}

文章目錄

    • 題目
    • 輸入
    • 輸出
    • 示例一
      • 輸入
      • 輸出
      • 說明
    • 示例二
      • 輸入
      • 輸出
    • 思路
    • 代碼

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

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

相關文章

PowerDesigner 安裝

PowerDesigner 安裝漢化破解使用過程 - 淪陷 - 博客園 (cnblogs.com)https://www.cnblogs.com/huangting/p/12654057.html

不要浪費

解法&#xff1a; 記錄一下tle的代碼 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n bool check(vector<int>& a, int l,int k) {int sum 0;for (int i 0; i < a.size() && l…

vue3中使用 tui-image-editor進行圖片處理,并上傳

效果圖 下載包 pnpm i tui-image-editor pnpm i tui-color-picker調用組件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

mescroll 在uni-app 運行的下拉刷新和上拉加載的組件

官網傳送門: https://www.mescroll.com/uni.html 最近使用到了mescroll 但是一直都是整個頁面的滾動, 最近需求有需要局部滾動, 收藏了一個博主的文章覺得寫的還挺好, 傳送門: https://blog.csdn.net/Minions_Fatman/article/details/134754926?spm1001.2014.3001.5506 使用…

基于springboot+vue的視頻網站系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

Stable Diffusion 模型分享:FenrisXL(芬里斯XL)

本文收錄于《AI繪畫從入門到精通》專欄,專欄總目錄:點這里。 文章目錄 模型介紹生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

IO進程線程第6天

1.使用有名管道完成兩個進程的相互通信 send.c代碼如下&#xff1a; #include <myhead.h>int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0){//父進程//從管道1中讀取數據int fd-1;if((fdopen("./mkfifo1",O_RDONLY))-1){perror("…

【安卓基礎3】Activity(一)

&#x1f3c6;作者簡介&#xff1a;|康有為| &#xff0c;大四在讀&#xff0c;目前在小米安卓實習&#xff0c;畢業入職 &#x1f3c6;本文收錄于 安卓學習大全&#xff0c;歡迎關注 &#x1f3c6;安卓學習資料推薦&#xff1a; 視頻&#xff1a;b站搜動腦學院 視頻鏈接 &…

微信小程序開發教程:

準備工作 下載并安裝微信開發者工具注冊微信公眾平臺賬號并創建小程序項目 項目結構 app.js&#xff1a;小程序的入口文件&#xff0c;用于定義全局變量和函數app.json&#xff1a;小程序的全局配置文件&#xff0c;用于配置小程序的頁面、窗口樣式、網絡超時時間等app.wxss&am…

反光衣實時識別檢測系統-反光衣穿戴識別系統-智慧工地系統安全帽佩戴---豌豆云

反光衣實時識別檢測系統是根據視頻流的自動化圖像識別檢測&#xff0c;運用前沿的深度神經網絡與云計算技術&#xff0c;替代工作人員的眼睛。 在工地、化工廠、煤礦石化等生產安全地區部署反光衣實時識別檢測系統&#xff0c;運用現場已有的視頻監控可以無死角全自動檢測生產…

Sora橫空出世!AI將如何撬動未來?

近日&#xff0c;OpenAI 發布首個視頻生成“Sora”模型&#xff0c;該模型通過接收文字指令&#xff0c;即可生成60秒的短視頻。 而在2022年末&#xff0c;同樣是OpenAI發布的AI語言模型ChatGPT&#xff0c;簡化了文本撰寫、創意構思以及代碼校驗等任務。用戶僅需輸入一個指令&…

【IC設計】Chisel API之Arbiter和RRArbiter的使用

文章目錄 介紹Chisel的Valid和Ready流控build.sbtRRArbiter代碼示例 介紹 仲裁器在NoC路由器中是重要的組成部分&#xff0c;虛通道仲裁和交叉開關仲裁都需要使用仲裁器。 Chisel提供了Arbiter和RRArbiter仲裁器 Arbiter是基礎的低位優先仲裁器&#xff0c; RRArbiter初始情況…

前端構建效率優化之路

項目背景 我們的系統&#xff08;一個 ToB 的 Web 單頁應用&#xff09;前端單頁應用經過多年的迭代&#xff0c;目前已經累積有大幾十萬行的業務代碼&#xff0c;30 路由模塊&#xff0c;整體的代碼量和復雜度還是比較高的。 項目整體是基于 Vue TypeScirpt&#xff0c;而構…

ProtoBuf認識與Windows下的安裝

protobuf簡介 Protobuf 是 Protocol Buffers 的簡稱&#xff0c;它是 Google 公司開發的一種數據描述語言&#xff0c;是一種輕便高效的結 構化數據存儲格式&#xff0c;可以用于結構化數據&#xff0c;或者說序列化。它很適合做數據存儲 或 RPC 數據交換格 式 。可用于通訊…

WebServer -- 定時器處理非活動連接(上)

目錄 &#x1f34d;函數指針 &#x1f33c;基礎知識 &#x1f419;整體概述 &#x1f382;基礎API sigaction 結構體 sigaction() sigfillset() SIGALRM, SIGTERM 信號 alarm() socketpair() send() &#x1f4d5;信號通知流程 統一事件源 信號處理機制 &#x…

2024全球網絡安全展望|構建協同生態,護航數字經濟

2024年1月&#xff0c;世界經濟論壇發布《2024全球網絡安全展望》報告&#xff0c;指出在科技快速發展的背景下&#xff0c;網絡安全不均衡問題加劇&#xff0c;需加強公共部門、企業組織和個人的合作。 報告強調&#xff0c;面對地緣政治動蕩、技術不確定性和全球經濟波動&am…

基于springboot+vue的美發門店管理系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

Python 高級語法:一切皆對象

1 “一切皆對象”是一種核心設計哲學 在編程領域&#xff0c;特別是面向對象編程&#xff08;OOP&#xff09;中&#xff0c;“一切皆對象”是一種核心設計哲學。這種哲學主張&#xff0c;無論是數據、函數、還是更復雜的結構&#xff0c;都可以被視為對象&#xff0c;并賦予…

信息安全基本概念匯總

目錄 一、安全加密算法相關 二、信息安全需求規范相關 三、安全啟動 四、安全更新 五、安全通信SecOC 六、HSM安全固件整體架構 一、安全加密算法相關 基于Autosar的網絡安全理解_搜狐汽車_搜狐網 基于AES的CMAC算法、MAC、Hash、數字簽名之間的關系_aes cmac-CSDN博客…

Cartographer框架簡述

catographer框架分為前端和后端 前端包括雷達數據處理&#xff1b;位姿預測&#xff1b;掃描匹配和柵格地圖更新。 后端包括后端&#xff1a;線程池任務與調度&#xff1b;向位姿圖添加節點&#xff0c;計算節點的子圖內約束和子圖間約束&#xff08;回環檢測&#xff09;&…