2016年省賽第七屆藍橋杯B組C/C++第九題解 交換瓶子
第九題:交換瓶子
有N個瓶子,編號 1 ~ N,放在架子上。
比如有5個瓶子:
2 1 3 5 4
要求每次拿起2個瓶子,交換它們的位置。
經過若干次後,使得瓶子的序號為:
1 2 3 4 5
對於這麼簡單的情況,顯然,至少需要交換2次就可以復位。
如果瓶子更多呢?你可以通過程式設計來解決。
輸入格式為兩行:
第一行: 一個正整數N(N<10000), 表示瓶子的數目
第二行:N個正整數,用空格分開,表示瓶子目前的排列情況。
輸出資料為一行一個正整數,表示至少交換多少次,才能完成排序。
例如,輸入:
5
3 1 2 5 4
程式應該輸出:
3
再例如,輸入:
5
5 4 3 2 1
程式應該輸出:
2
資源約定:
峰值記憶體消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入…” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意: main函式需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。
方法:假設目前要交換的是第i個值,找到i後面比a[i]小且最小的值與之交換即可。
#include<iostream>
using namespace std;
int main(){
int n,t,min,pos,ans,a[105];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
min=a[i];
for(int j=i+1;j<n;j++){
if(a[j]<min){
min=a[j];
pos=j;
}
}
if(min<a[i]){
t=a[i];
a[i]=a[pos];
a[pos]=t;
ans++;
}
}
cout<<ans<<endl;
return 0;
}
相關文章
- 第十三屆藍橋杯省賽C/C++ B組C++
- 第九屆藍橋杯B組省賽———乘積最大
- 2017第八屆藍橋杯C/C++ B組省賽第二題 秒解C++
- 藍橋杯__省賽__第九屆__C/C++__大學A組C++
- 試題B:小球反彈(第十五屆藍橋杯省賽B組c/c++組)C++
- 藍橋杯__省賽__第七屆__C/C++__大學A組C++
- 第十四屆藍橋杯省賽C++ B組(個人經歷 + 題解)C++
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- 第九屆藍橋杯省賽C++A組 倍數問題(dfs)C++
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科B組)Java
- 2018第九屆藍橋杯省賽C++B組【第四題:測試次數】C++
- 第十屆藍橋杯C++國賽B組部分題解(假題解)C++
- 2019年省賽第十屆藍橋杯B組C/C++試題H解 等差數列C++
- 第九屆藍橋杯軟體類省賽 Java B組 題目及解析Java
- 2020藍橋杯省賽B組C++(第二場)真題C++
- 【藍橋杯考前突擊】第十屆藍橋杯省賽C/C++大學B組 試題 D 數的分解C++
- 第六屆藍橋杯省賽CC++B組C++
- 2015年省賽第六屆藍橋杯B組C/C++第五題解 九陣列分數C++陣列
- 2017省賽藍橋杯B組
- 2018藍橋杯省賽B組
- 第十五屆藍橋杯C++B組省賽總結C++
- 第十屆藍橋杯省賽C++B組 等差數列C++
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科A組)Java
- 歷屆藍橋杯省賽(C、C++)的答案(轉)C++
- 2015年藍橋杯六屆省賽大學B組真題
- 第十五屆藍橋杯大賽軟體賽省賽 C/C++ 大學 A 組C++
- 第十三屆藍橋杯省賽A組
- 藍橋杯__省賽__第八屆__C/C++__大學A組C++
- 2016年藍橋杯C/C++組省賽第三題--湊算式C++
- 2016年藍橋杯C/C++組省賽第四題--快速排序C++排序
- 2013第四屆藍橋杯省賽C++B組【第六題:三部排序】C++排序
- 藍橋杯第五屆省賽題目及題解
- 第14屆藍橋杯B組國賽
- 2013藍橋杯題解c組C++C++
- 2016年藍橋杯C/C++組省賽第一題--煤球數目C++
- 2016年藍橋杯C/C++組省賽第二題--生日蠟燭C++
- 2013年第四屆藍橋杯省賽試題及詳解(Java本科C組)Java
- 2014年第五屆藍橋杯省賽試題及詳解(Java本科C組)Java