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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考)

發布時間:2024/2/28 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

勵志用更少的代碼做更高效的表達


問題描述:

為豐富同學們的業余文化生活,某高校學生會創辦了3個興趣小組
(以下稱A組,B組,C組)。
每個小組的學生名單分別在【A.txt】,【B.txt】和【C.txt】中。
每個文件中存儲的是學生的學號。
由于工作需要,我們現在想知道:
既參加了A組,又參加了B組,但是沒有參加C組的同學一共有多少人?
請你統計該數字并通過瀏覽器提交答案。
注意:答案是一個整數,不要提交任何多余的內容。


思路整理

本題的思路很簡單, A組數據與B組數據做交集, 得到D組數據, 與C組數據做交集, 最后D-C為正解。

但如何將數據放入容器,再求交集呢?難點有二,其一是如何開辟數組,其二是如何將數據錄入數組。

幾種思路分析:

1 最簡便的方法當然是使用java, 形如:int a[] = {...} 直接動態開辟數組,無需計算數組的長度 , 香爆了!

2 使用word做字符替換,查找出每組數據的個數, (word統計出現次數的用法見這篇博客——>傳送門1)從而開辟數組的空間,使用scanf()或直接賦值的方法得到數據數組。

3 還有一種很巧妙的思路, 我們可以人為的輸入某些值, 來代表一組數據錄入的結束。 比如:使用while循環做輸入, 當識別到-1時, 代表輸入一組數據的結束, 這樣就可以非常方便的錄入三組數據!


注意:

1 若使用scanf輸入數據, 要注意scanf("%d,", &x), 逗號后面沒有空格, 否則會要求我們多輸入一個數據。也就是scanf的吃空格行為。具體原因和解釋見這篇博客——>傳送門2

2 不用擔心前導零的影響, 因為用int做輸入時會忽略前導零。


代碼展示了一種非常巧妙的方法, 也就是基于思路3的用法。 只用了15行代碼就解決了問題!


代碼展示

#include <bits/stdc++.h> using namespace std; const int maxn=1e8+10; bool book[3][maxn]; int main() {int i,val,cur,ans;cur=0;while(scanf("%d,",&val)!=EOF)if(val==-1) cur++;else book[cur][val]=1;ans=0;for(i=0;i<100000000;i++)if(book[0][i]&&book[1][i]&&!book[2][i]) ans++;printf("%d\n",ans); return 0; }

輸出結果: 20


最重要的一點,我們的目的是解題, 不是炫技! 實用才是王道!

總結

以上是生活随笔為你收集整理的15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。