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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

7-37 模拟EXCEL排序 (25 分)(思路+详解+超时解决 兄弟们冲呀呀呀呀呀呀)

發(fā)布時(shí)間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-37 模拟EXCEL排序 (25 分)(思路+详解+超时解决 兄弟们冲呀呀呀呀呀呀) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:題目

Excel可以對(duì)一組紀(jì)錄按任意指定列排序?,F(xiàn)請(qǐng)編寫程序?qū)崿F(xiàn)類似功能。

輸入格式:
輸入的第一行包含兩個(gè)正整數(shù)N(≤10
5
) 和C,其中N是紀(jì)錄的條數(shù),C是指定排序的列號(hào)。之后有 N行,每行包含一條學(xué)生紀(jì)錄。每條學(xué)生紀(jì)錄由學(xué)號(hào)(6位數(shù)字,保證沒有重復(fù)的學(xué)號(hào))、姓名(不超過8位且不包含空格的字符串)、成績(jī)([0, 100]內(nèi)的整數(shù))組成,相鄰屬性用1個(gè)空格隔開。

輸出格式:
在N行中輸出按要求排序后的結(jié)果,即:當(dāng)C=1時(shí),按學(xué)號(hào)遞增排序;當(dāng)C=2時(shí),按姓名的非遞減字典序排序;當(dāng)C=3時(shí),按成績(jī)的非遞減排序。當(dāng)若干學(xué)生具有相同姓名或者相同成績(jī)時(shí),則按他們的學(xué)號(hào)遞增排序。

輸入樣例:

3 1 000007 James 85 000010 Amy 90 000001 Zoe 60

輸出樣例:

000001 Zoe 60 000007 James 85 000010 Amy 90

二:思路

這個(gè)題是用結(jié)構(gòu)體存儲(chǔ) 學(xué)號(hào) 姓名 成績(jī) 三個(gè)變量,然后重寫sort函數(shù)。

三:上碼

/**思路:利用結(jié)構(gòu)體存下,學(xué)號(hào),姓名,成績(jī) ;然后重寫sort函數(shù)*/#include<bits/stdc++.h> using namespace std;struct Node{string id;string name;int grade; };bool sort_id( Node a,Node b ){return a.id < b.id;}bool sort_name( Node a, Node b ){if( a.name == b.name ) //當(dāng)名字相同時(shí),按照id進(jìn)行排序 return a.id < b.id;return a.name < b.name; }bool sort_grade( Node a, Node b ){if( a.grade == b.grade)//當(dāng)成績(jī)相同時(shí),按照id進(jìn)行排序 return a.id < b.id; return a.grade < b.grade; } int main(){int N,M;cin >> N >> M;//創(chuàng)建結(jié)構(gòu)體數(shù)組Node *node = new Node[N]; for( int i = 0; i < N; i++ ){cin >> node[i].id >> node[i].name >> node[i].grade;}if( M == 1)sort(node,node+N,sort_id);if( M == 2)sort(node,node+N,sort_name);if( M == 3)sort(node,node+N,sort_grade);for( int i = 0; i < N; i++ ){cout << node[i].id << ' ' << node[i].name << ' ' << node[i].grade << endl;} }

補(bǔ)充超時(shí)解決:

1.這個(gè)需要卡時(shí)間,多提交幾次就還可以卡過去。2.或則將cout cin 改成printf 和 scanf這些都是我的做題經(jīng)驗(yàn),親試有效,但如果還不行,那就回爐重造。重新構(gòu)思路,重新編碼,一旦你寫出來,再怎么改還是原來的套路,很可能還是過不去。

四:總結(jié)和踩過的坑

這個(gè)題思路是我第一次這么寫,很明顯,不是我想出來的,我是學(xué)習(xí)大佬的。但是我還是自己做了遍,用的是map容器,其時(shí)用map是不對(duì)的,因?yàn)槲乙豢搭}是排序,然后就沒仔細(xì)讀題,看了下輸出和輸入就寫碼了,結(jié)果很顯然,有3個(gè)點(diǎn)是過不去的,因?yàn)檫@個(gè)題還說會(huì)出現(xiàn)重復(fù)的名字和成績(jī),在map容器當(dāng)中他的鍵值是不允許重復(fù)的,一旦重復(fù),就會(huì)發(fā)生覆蓋。然后我就上網(wǎng)學(xué)習(xí)大佬的,果然有收獲,這種做法,是真的牛逼。哈哈哈哈哈哈哈學(xué)到了哈哈哈。

五:記錄失敗的思考結(jié)果

這是我用map做的,有3個(gè)點(diǎn)是過不去的。而且是無法修復(fù)的,僅此記錄一下。

#include<bits/stdc++.h> using namespace std;int main(){int N,M;map<string,string>m1,m2;map<string,string>:: iterator t;cin >> N >> M;for( int i = 0; i < N; i++ ){string a,b,c;cin >> a >> b >> c;if(M == 1){m1[a] = b;m2[a] = c;}if(M == 2){m1[b] = a;m2[b] = c;}if(M == 3){m1[c] = a;m2[c] = b;}} if( M == 1){for( t = m1.begin(); t != m1.end(); t++ ){cout << t->first << ' ' << t->second <<' '<< m2[t->first] << endl;}}if( M == 2){for( t = m1.begin(); t != m1.end(); t++ ){cout << t->second << ' ' << t->first <<' '<< m2[t->first] << endl;}} if( M == 3 ){for( t = m1.begin(); t != m1.end(); t++ ){cout << t->second << ' ' << m2[t->first] <<' '<< t->first << endl;}} }//3 3 //000007 James 85 //000010 Amy 90 //000001 Zoe 60

加油boy! 越努力越幸運(yùn)!我要敷面膜去了,男孩子也要護(hù)膚,也要香香的美美的!

總結(jié)

以上是生活随笔為你收集整理的7-37 模拟EXCEL排序 (25 分)(思路+详解+超时解决 兄弟们冲呀呀呀呀呀呀)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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