标题:求排名的程序
只看楼主
lonelyfairy
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2009-9-29
结帖率:90.91%
已结贴  问题点数:10 回复次数:6 
求排名的程序
已知某运动会上百米决赛成绩,要求编写程序,分别输入8位运动员的号码和成绩,然后按成绩排名并输出排名结果,包括名次、运动员号、成绩3项内容。      请高人指点!!!!
搜索更多相关主题的帖子: 排名 
2009-10-16 13:11
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
得分:0 
我来说说算法哈
定义一个结构体,里面有3个成员,分别为int 名次,long 编号,int 成绩(成绩一般是秒和微秒组成,可以定义一个2个元素的数组,一个存秒,一个存微秒,输出的时候在格式控制上加个:比如printf("chengji:%d:%d")...)
然后用for循环输入8个运动员的号码和对应成绩,然后用冒泡或选择对成绩排序,并记录编号。最后按顺序输出即可(建议用指针处理)。
#include <stdio.h>
void main()
{
    int i;
    char a[5][13]={"       0ooo ",
                   "ooo0   (   )",
                   "(   )   ) / ",
                   " \\ (   (_/  ",
                   "  \\_)       "};
    for(i=0;i<5;i++)
        puts(a[i]);
    getch();
}

我可好玩啦...不信你玩玩^_^
2009-10-16 13:17
sen_lin
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:114
专家分:436
注 册:2009-3-24
得分:0 
还要考虑两个人的成绩相同时怎么对两人进行排序。
2009-10-16 13:36
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
得分:5 
在程序中输入时,要先输入选手的号码,然后跟着输入他的成绩(当做int型,如果是小数,再改一下),比如:
1 58   2 66   3 44
/* Note:Your choice is C IDE */
#include "stdio.h"
#define N 3
void main()
{
    int a[N][3],b[N];
    int i,j,num,t,s;
    printf("please input the result and the NO. of the athletes:\n");
    for(i=0;i<N;i++)
       for(j=0;j<2;j++)
           scanf("%d",&a[i][j]);
    for(i=0;i<N;i++)
       b[i]=i;
     
    for(i=0;i<N-1;i++)
       for(j=i+1;j<N;j++)
          if(a[i][1]<a[j][1])
            {
                t=a[i][1];
                a[i][1]=a[j][1];
                a[j][1]=t;
                t=b[i];
                b[i]=b[j];
                b[j]=t;
            }
     printf("NO.       score         rank   \n");
     for(i=0;i<N;i++)
     printf("%d        %d            %d \n",a[b[i]][0],a[i][1],i+1);
}
2009-10-16 18:06
lonelyfairy
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2009-9-29
得分:0 
2楼的思路不错,4楼的程序也有过人之处,我也编一个,请大家过目!




#include "stdio.h"
#define N 2
main()
{ int i,j,g,t;
  int a[N][8];
  printf("请输入8位运动员的号码和成绩:\n");
  for(i=0;i<N;i++)
  { for(j=0;j<8;j++)
    scanf("%d",&a[i][j]);
  }
  for(j=0;j<8;j++)
  { for(i=0;i<8;i++)
    { if(a[N-1][i]<a[N-1][i+1])
      {  g=a[N-1][i];
     t=a[N-2][i];
     a[N-1][i]=a[N-1][i+1];
     a[N-2][i]=a[N-2][i+1];
     a[N-1][i+1]=g;
     a[N-2][i+1]=t;
      }
    }
  }
  for(i=1;i<9;i++)
  printf("%5d",i);
  printf("\n");
  for(i=0;i<N;i++)
  { for(j=0;j<8;j++)
    printf("%5d",a[i][j]);
    printf("\n");
  }
}




但怎样才能分别在每行加上“名次” “编号” “成绩”呢?
2009-10-16 22:22
wangdezi
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2009-10-16
得分:0 
好啊 不错 这是基本的习题!!!
2009-10-16 22:25
yutianshangu
Rank: 2
等 级:论坛游民
帖 子:25
专家分:73
注 册:2008-10-12
得分:5 
#include "stdio.h"
#include "stdlib.h"
typedef struct  
{
    int num;
    int time;
} athlete;
void main()
{
    int i,j;
    athlete a[4],t,k;
    for(i=0;i<4;i++)
        scanf("%d%d",&a[i].num,&a[i].time);
    for(i=0;i<4;i++)
        printf("%d  %d\n",a[i].num,a[i].time);
 
 
    printf("\n\n\n");
 
    for(i=0;i<3;i++)
        for(j=0;j<3-i;j++)
        {
            if(a[j].time>a[j+1].time)
            {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
            }
        }
 
        for(i=0;i<4;i++)
        printf("%d  %d\n",(a+i)->num,(a+i)->time);
}
给你个超级简陋的。。应该比前面那几个都容易一些。
2009-10-16 23:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-288765-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018762 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved