Kain
|
分享:
▼
x0
|
[C/C++] 請問依學生成績做名次排列印出的問題
不好意思...我有個期中考的考題延伸 卡在不會排序跟比較傳值的部份 想請大家幫忙解答一下 Q:求四位同學2科成績之總分,並排分數高低排序,標名次 (這一段總分是程式自己算的,我是用二維陣列方式代出總分) 國 英 總分 (一) 80 70 150 (二) 70 90 160 (三) 80 90 170 (四) 40 50 90 ---------------------------------------- 但最後印出時應如下:(以總分做排名,相同分數以國文優先) 國 英 總分 名次 (三) 80 90 170 1 (二) 70 90 160 2 (一) 80 70 150 3 (四) 40 50 90 4 == 我會用氣泡排列 但是只會用在一維陣列(就是一堆數字比大小) 二維陣列該怎麼用我就不知道了 我用二維陣列只寫得出上面那個 下面那個就 .. 訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容
|
|
x0
[樓 主]
From:未知地址 | Posted:2005-06-14 10:52 |
|
|
Freelife
|
分享:
▲
▼
那你可以用陣列 sum來做排序, 如果 sum[1]的值,和 sum[2]交換的時候~ 就把 a[1][ * ]的所有值,和 a[2][ * ]的所有值交換(* 表示所有的陣列元素)~ 當你把 sum變成由大排到小,二維陣列 a的值,也會依照總分作排序~ 然後再印出來,就是答案了~
|
|
x0
[1 樓]
From:台灣中華電信
| Posted:2005-06-14 15:18 |
|
|
codeboy
|
分享:
▲
▼
圖 1.
剛好有空就稍微寫了一下...用的方法比較笨一些..你可以參考一下! 應該有更好的方法!在想想摟~ 複製程式
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a[4][4]={{1,70,80,88},{2,88,78,90},{3,92,70,86},{4,86,90,60}};
int b[4]={1,2,3,4};
int g;
float sum[4],sum2[4],aveg[4],temp;
for(int c=0;c<4;c++)
{
sum[c]=a[c][1]+a[c][2]+a[c][3];
sum2[c]=sum[c];
aveg[c]=sum[c]/3;
}
for(int j=0;j<4;j++)
{
for(int k=j;k<4;k++)
{
if(sum2[j]<sum2[k])
{
temp=sum2[j];
sum2[j]=sum2[k];
sum2[k]=temp;
g=b[j];
b[j]=b[k];
b[k]=g;
}
}
}
cout<<"編號| 國文 | 英文 | 數學 | 總合 | 平均 | 排名"<<endl;
for(int n=0;n<4;n++)
{
int tempI;
cout<<a[n][0]<<" | "<<a[n][1]<<" | "<<a[n][2]<<" | "<<a[n][3]<<" | "<<sum[n]<<" | "<<aveg[n];
for(int d=0;d<4;d++)
{
if(b[d]==(n+1))
{
tempI=(d+1);
}
}
cout<<" | "<<tempI<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
coding by dev-c++ 4.9.9.1
[ 此文章被codeboy在2005-06-14 16:26重新編輯 ]
|
連結有問題請來信,我會盡快修正~^^ 通報時請附上是"哪一篇失效"...這樣我才能去修正~麻煩各位好心人士了~ [連結失效通報][ 網頁.伺服.程式 討論區]----------------------在世界中心呼喊愛情----------------------深深思念一個人的時候,我們不知不覺的地活在世界的中心...
|
x0
[2 樓]
From: | Posted:2005-06-14 16:11 |
|
|
andyz
惡靈退散 o(╬ ̄皿 ̄)=○ &nb ..
|
分享:
▲
複製程式
#include <iostream.h>
void main()
{
cout<<" 國文 "<<"英文 "<<"數學 "<<" 總分 "<<"平均 "<<endl;
float a[4][6]={{1,70,80,88,0,0},{2,88,78,90,0,0},{3,92,70,86,0,0},{4,86,90,60,0,0}},b[4][6];
int j,k;
for ( k=0;k<4;k++){
for ( j=1;j<4;j++){
a[k][4]+=a[k][j];}
a[k][5]=a[k][4]/3;
}
for (k=0;k<6;k++){
b[0][k]=a[0][k];}
for(j=0;j<3;j++){//因為a只[4]所以做到3就可以了
if(b[j][4]>a[j+1][4]){
for (k=0;k<6;k++){
b[j+1][k]=a[j+1][k];}}
else if(b[j][4]<a[j+1][4]){
for (k=0;k<6;k++){
b[j+1][k]=b[j][k];
b[j][k]=a[j+1][k];
}}
else if(b[j][4]==a[j+1][4]){
if(b[j][1]>a[j+1][1]){
for (k=0;k<6;k++){
b[j+1][k]=a[j+1][k];}}
else if(b[j][1]<a[j+1][1]){
for (k=0;k<6;k++){
b[j][k]=a[j+1][k];
b[j+1][k]=a[j][k];}}}
}
for ( k=0;k<4;k++){
for ( j=0;j<6;j++){
cout<<b[k][j]<<" ";}
cout<<endl;}
}
小弟的愚解 好像只適用於本題 改數字後就... 改天再修改吧 複製程式
#include <iostream.h>
void main()
{
cout<<" 國文 "<<"英文 "<<"數學 "<<" 總分 "<<"平均 "<<endl;
float a[4][6]={{1,70,80,88,0,0},{2,88,78,90,0,0},{3,92,70,86,0,0},{4,86,90,60,0,0}},temp[6];
int i,j,k,flag;
for ( k=0;k<4;k++){
for ( j=1;j<4;j++){
a[k][4]+=a[k][j];}
a[k][5]=a[k][4]/3;
}
flag=0;
for (i=0;i<4&&(!flag);i++)
{
flag=1;
for (j=0;j<3-i;j++){
if (a[j][4]<a[j+1][4])
{
for (k=0;k<6;k++){
temp[k]=a[j][k];
a[j][k]=a[j+1][k];
a[j+1][k]=temp[k];}
flag=0;}}
}
for ( k=0;k<4;k++){
for ( j=0;j<6;j++){cout<<a[k][j]<<" ";}
cout<<endl;}
} 改成這樣就沒問題了
[ 此文章被andyz在2005-06-28 11:58重新編輯 ]
|
回文原則(以下只適用在我的管理區) 1.我不回太白目的問題 2.還有娘家文 3.看不懂得也是 4.我很懶得把你的問題(也就是文字敘述)想成我要看到的畫面(也就是螢幕上出現的畫面)。純文字敘述者,看不懂在說啥就不回。想要解答就先下點功夫,來個圖文並茂的文章吧。 5.想到再打
何謂白目問題 1.看不懂英文的,要求翻譯 2.沒經過爬文就問 3.給個問題(題目)就要求解答。例如:請問XXX怎麼寫。自己的CODE都沒有貼上來就要求別人幫你寫,不如你的作業我幫你作、你的書我幫你讀好了 4.想到再打
|
x1
[6 樓]
From:台灣數位聯合
| Posted:2005-06-22 00:09 |
|
|
|