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 |
|
|
|