日期:2014-05-19  浏览次数:21066 次

一个面试题目
有下面几个人
 
姓名       成绩       年龄
张三       88           20
李四       79           21
王五       90           23
赵六       90           22
......

.....

.....


这些数据不是放在数据库中的,用程序来实现
要求:
先按成绩排名,如果成绩相同的话按年龄排名。

不知道这个程序怎么写,请各位给个答案。

小弟回去琢磨琢磨,谢谢了。。

------解决方案--------------------
1.假充数据结构如下:
public class People
{
public string Name; //名子
public int Score; //成绩
public int Age; //年龄
}

2.建立了个数组, 个数为成员的总个数count个.
People[] p = new People[count];
然后按年龄排序p

3.新建一个数组
People[] p1 = new People[count];
然后做一个循环,从p中按顺序读取最大的,然后放到新数组中,再删除原来的数.

最终得到的p1就是要求数组.

------解决方案--------------------
PS.第三步排序是对成绩排序.
比如第一次取出成绩最高的,然后第二次再取出次高的(可能和最高的一样), 最后一一取出.
当然也可以用冒泡法在数组里交换.第一次排序也是一样.
------解决方案--------------------
class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
ArrayList objs = new ArrayList();

objs.Add( new Person( "张三 ", 88, 20) );
objs.Add( new Person( "李四 ", 79, 21) );
objs.Add( new Person( "王五 ", 90, 23) );
objs.Add( new Person( "赵六 ", 90, 22) );

foreach( Person p in objs )
Console.WriteLine(p.ToString());

objs.Sort(new PersonComparer());

Console.WriteLine( "After sorting... ");

foreach( Person p in objs )
Console.WriteLine(p.ToString());

Console.ReadLine();
}
}

class PersonComparer : IComparer
{
#region IComparer Members

public int Compare(object x, object y)
{
Person xp = x as Person;
if( xp == null )
throw new ArgumentException();

Person yp = y as Person;
if( yp == null )
throw new ArgumentException();

int gradesResult = xp.Grades - yp.Grades;

if( gradesResult != 0 ) return gradesResult;

return xp.Age - yp.Age;
}

#endregion
}


class Person
{
public Person(string name, int grades, int age)
{
this.name = name;
this.grades = grades;
this.age = age;
}

private string name;
private int grades;
private int age;

public override string ToString()
{
return Name + " " + Grades + " " + Age;
}
}
------解决方案--------------------
class Person
{
public Person(string name, int grades, int age)
{
this.name = name;
this.grades = grades;
this.age = age;
}

private string name;
private int grades;
private int age;

public override string ToString()
{
return Name + " " + Grades + " " + Age;
}

public string Name
{
get
{
return name;
}
}
public int Grades
{
get
{
return grades;
}
}