[問題] 名次排序
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
最近在練習設計一個成績管理系統,目前卡在成績及名次的排序問題,
問題在於完成排序後,原本的編號就會亂掉,
像是:
原本
a[5] = { 5 , 2 , 1 , 4 , 3 }
b[5] = { 10, 50, 80, 20, 40}
排序a[]後就會變成
a[5] = { 1 , 2 , 3 , 4 , 5 }
但是b[]的順序還是一樣
不知道該怎麼說,表達的不太好,請見諒QQ
餵入的資料(Input):
預期的正確結果(Expected Output):
score:
10
50
80
20
40
rank:
5
2
1
4
3
成績80排名1
成績50排名2
成績40排名3
成績20排名4
成績10排名5
錯誤結果(Wrong Output):
score:
10
50
80
20
40
rank:
5
2
1
4
3
成績10排名1
成績50排名2
成績80排名3
成績20排名4
成績40排名5
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main( void )
{
int sum[5] = { 10, 50, 80, 20, 40 };
int i, j, k=0;
int rank[5] ={0};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(sum[i] <= sum[j])
{
rank[i]++;
}
}
}
cout << "score:\n";
for(i=0;i<5;i++)
{ cout << sum[i] << '\n'; }
cout << "rank:\n";
for(i=0;i<5;i++)
{ cout << rank[i] << "\n"; }
cout << '\n';
for ( i = 0 ; i < 5 ; i++ ){
if( rank[i] = k+1 ){
cout << "成績" << sum[i] << "排名" << rank[i] <<'\n';
k++;
}}
system("pause");
return 0;
}
(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.113.127.195
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 16:37)
推
06/25 16:37, , 1F
06/25 16:37, 1F
忘了說明,這個程式只是用來測試排序過後的資料有沒有同步0.0
主要程式裡面有多種成績,所以需要名次來排序,
目前正卡在排序過後的資料不同步。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 16:52)
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 16:52)
→
06/25 17:04, , 2F
06/25 17:04, 2F
→
06/25 17:09, , 3F
06/25 17:09, 3F
→
06/25 17:09, , 4F
06/25 17:09, 4F
→
06/25 17:09, , 5F
06/25 17:09, 5F
→
06/25 17:20, , 6F
06/25 17:20, 6F
→
06/25 17:21, , 7F
06/25 17:21, 7F
→
06/25 17:22, , 8F
06/25 17:22, 8F
→
06/25 17:24, , 9F
06/25 17:24, 9F
→
06/25 18:49, , 10F
06/25 18:49, 10F
剛剛弄好了,可以執行,結果也正確,就把它整合到主程式裡,
不過又出現另一個問題QQ,程式可以執行,但跑到switch case那邊,
輸入選擇後,程式就馬上關閉。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 20:36)
主程式碼http://ideone.com/tMS2kV
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 20:39)
→
06/25 20:42, , 11F
06/25 20:42, 11F
→
06/25 20:46, , 12F
06/25 20:46, 12F
我也不太清楚..同學教我弄得=_=
switch case我不太會用,不知道能不能直接指定副程式。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 20:52)
→
06/25 20:55, , 13F
06/25 20:55, 13F
→
06/25 20:58, , 14F
06/25 20:58, 14F
→
06/25 21:00, , 15F
06/25 21:00, 15F
程式是我自己的,我switch case那邊比較不懂,所以請教同學=_=
data[i].Rank的i值我記得有設1。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 21:13)
→
06/25 21:14, , 16F
06/25 21:14, 16F
→
06/25 21:16, , 17F
06/25 21:16, 17F
→
06/25 21:21, , 18F
06/25 21:21, 18F
我修改了一下,先暫時不用名次去排序QQ,先只用成績排序,
這樣應該就沒有i的值沒設定到,然後我測試了一下,switch case那邊,
好像是不管輸入什麼都會跳到define(不合法輸入值?)然後程式就關閉了。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 21:36)
→
06/25 22:02, , 19F
06/25 22:02, 19F
→
06/25 22:02, , 20F
06/25 22:02, 20F
我把switch case改成if else之後測試,只要選擇要排序的功能就會出錯,
問題好像是k值沒有初始化?請問要怎麼修改才能夠初始化k值。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 22:59)
→
06/25 23:05, , 21F
06/25 23:05, 21F
→
06/25 23:14, , 22F
06/25 23:14, 22F
http://ideone.com/DgCkEt
我嘗試把k初始為0,但是只要成績資料輸入完,就會出現錯誤。
還有之前一直忘記問for( ;rank[k] != i+1;k++ )第一個分號之前不用放東西嗎0.0?
這句我看不太懂說。
※ 編輯: sofksjmf 來自: 120.113.127.195 (06/25 23:23)
→
06/26 00:11, , 23F
06/26 00:11, 23F
→
06/26 05:09, , 24F
06/26 05:09, 24F
→
06/26 05:17, , 25F
06/26 05:17, 25F
→
06/26 05:44, , 26F
06/26 05:44, 26F
→
06/26 11:28, , 27F
06/26 11:28, 27F