日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CCF-CSP 201703-2 试题名称:学生排队(满分代码)

發(fā)布時(shí)間:2025/6/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CCF-CSP 201703-2 试题名称:学生排队(满分代码) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題描述
試題編號(hào): 201703-2
試題名稱: 學(xué)生排隊(duì)
時(shí)間限制: 1.0s
內(nèi)存限制: 256.0MB
問(wèn)題描述:
問(wèn)題描述
  體育老師小明要將自己班上的學(xué)生按順序排隊(duì)。他首先讓學(xué)生按學(xué)號(hào)從小到大的順序排成一排,學(xué)號(hào)小的排在前面,然后進(jìn)行多次調(diào)整。一次調(diào)整小明可能讓一位同學(xué)出隊(duì),向前或者向后移動(dòng)一段距離后再插入隊(duì)列。
  例如,下面給出了一組移動(dòng)的例子,例子中學(xué)生的人數(shù)為8人。
  0)初始隊(duì)列中學(xué)生的學(xué)號(hào)依次為1, 2, 3, 4, 5, 6, 7, 8;
  1)第一次調(diào)整,命令為“3號(hào)同學(xué)向后移動(dòng)2”,表示3號(hào)同學(xué)出隊(duì),向后移動(dòng)2名同學(xué)的距離,再插入到隊(duì)列中,新隊(duì)列中學(xué)生的學(xué)號(hào)依次為1, 2, 4, 5, 3, 6, 7, 8;
  2)第二次調(diào)整,命令為“8號(hào)同學(xué)向前移動(dòng)3”,表示8號(hào)同學(xué)出隊(duì),向前移動(dòng)3名同學(xué)的距離,再插入到隊(duì)列中,新隊(duì)列中學(xué)生的學(xué)號(hào)依次為1, 2, 4, 5, 8, 3, 6, 7;
  3)第三次調(diào)整,命令為“3號(hào)同學(xué)向前移動(dòng)2”,表示3號(hào)同學(xué)出隊(duì),向前移動(dòng)2名同學(xué)的距離,再插入到隊(duì)列中,新隊(duì)列中學(xué)生的學(xué)號(hào)依次為1, 2, 4, 3, 5, 8, 6, 7。
  小明記錄了所有調(diào)整的過(guò)程,請(qǐng)問(wèn),最終從前向后所有學(xué)生的學(xué)號(hào)依次是多少?
  請(qǐng)?zhí)貏e注意,上述移動(dòng)過(guò)程中所涉及的號(hào)碼指的是學(xué)號(hào),而不是在隊(duì)伍中的位置。在向后移動(dòng)時(shí),移動(dòng)的距離不超過(guò)對(duì)應(yīng)同學(xué)后面的人數(shù),如果向后移動(dòng)的距離正好等于對(duì)應(yīng)同學(xué)后面的人數(shù)則該同學(xué)會(huì)移動(dòng)到隊(duì)列的最后面。在向前移動(dòng)時(shí),移動(dòng)的距離不超過(guò)對(duì)應(yīng)同學(xué)前面的人數(shù),如果向前移動(dòng)的距離正好等于對(duì)應(yīng)同學(xué)前面的人數(shù)則該同學(xué)會(huì)移動(dòng)到隊(duì)列的最前面。
輸入格式
  輸入的第一行包含一個(gè)整數(shù)n,表示學(xué)生的數(shù)量,學(xué)生的學(xué)號(hào)由1到n編號(hào)。
  第二行包含一個(gè)整數(shù)m,表示調(diào)整的次數(shù)。
  接下來(lái)m行,每行兩個(gè)整數(shù)p, q,如果q為正,表示學(xué)號(hào)為p的同學(xué)向后移動(dòng)q,如果q為負(fù),表示學(xué)號(hào)為p的同學(xué)向前移動(dòng)-q。
輸出格式
  輸出一行,包含n個(gè)整數(shù),相鄰兩個(gè)整數(shù)之間由一個(gè)空格分隔,表示最終從前向后所有學(xué)生的學(xué)號(hào)。
樣例輸入
8
3
3 2
8 -3
3 -2
樣例輸出
1 2 4 3 5 8 6 7
評(píng)測(cè)用例規(guī)模與約定
  對(duì)于所有評(píng)測(cè)用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移動(dòng)均合法。
  滿分代碼:

#include<iostream> #include<cmath> using namespace std; const int N=1005; struct op {int num;int dire; // 方向direction } ; struct pos {int stuNum;int curP; //學(xué)號(hào)為stuNum的學(xué)生當(dāng)前的位置 } ; void move(int * now,int dire,int curP) //數(shù)組在函數(shù)中可以直接永久改變它的元素的值,不用再次返回了 {int tmp=now[curP];if(dire>0){for(int i=curP;i<curP+dire;i++){now[i]=now[i+1];}now[ curP+dire]= tmp;}else if(dire<0){int moveD=abs(dire);for(int i=curP;i>curP-moveD;i--){now[i]=now[i-1];}now[ curP-moveD]= tmp;}} int main() {int n,m;cin>>n>>m;pos a[N];int b[N]; //輔助存儲(chǔ)每次變換后的隊(duì)列編號(hào)序列for(int i=1;i<=n;i++){a[i].stuNum=i;a[i].curP=i;b[i]=i;}op oper[N] ;for(int i=1;i<=m;i++){cin>> oper[i].num>>oper[i].dire;int tmpF;for(int j=1;j<=n;j++){if(b[j]==oper[i].num){tmpF=j;}}move(b,oper[i].dire,tmpF) ;}for(int i=1;i<=n;i++)cout<<b[i]<<" ";cout<<endl;return 0;}

代碼里面用一個(gè)函數(shù)move模擬了對(duì)隊(duì)列進(jìn)行一次變換的過(guò)程,注意先保存要出列再入列的元素的值,然后移動(dòng)其他元素,最后把保存的tmp值放在入列后的新位置上,防止其他元素將它原先的值覆蓋掉。

總結(jié)

以上是生活随笔為你收集整理的CCF-CSP 201703-2 试题名称:学生排队(满分代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。