首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个面试题目解决方法

2012-03-20 
一个面试题目有下面几个人姓名成绩年龄张三8820李四7921王五9023赵六9022................这些数据不是放

一个面试题目
有下面几个人
 
姓名       成绩       年龄
张三       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;
}
}



public int Age
{
get
{
return age;
}
}

}

class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Person[] objs=new Person[4];
objs[0]=new Person( "张三 ", 88, 20);
objs[1]=new Person( "李四 ", 79, 21);
objs[2]=new Person( "王五 ", 90, 23);
objs[3]=new Person( "赵六 ", 90, 22);

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


Console.WriteLine( "--------------------- ");
//---------------------

Order(objs);

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


}

static void Order(Person[] T)
{
Person Temp;
int i=0;
int j=0;
for(i=0;i <T.Length;i++)
{
for(j=i+1;j <T.Length;j++)
{
if (T[i].Grades <T[j].Grades)
{
Temp=new Person(T[i].Name,T[i].Grades,T[i].Age );
T[i]=new Person(T[j].Name,T[j].Grades,T[j].Age);
T[j]=new Person(Temp.Name,Temp.Grades,Temp.Age);

}
else if((T[i].Grades ==T[j].Grades) && (T[i].Age > T[j].Age))
{
Temp=new Person(T[i].Name,T[i].Grades,T[i].Age);
T[i]=new Person(T[j].Name,T[j].Grades,T[j].Age);
T[j]=new Person(Temp.Name,Temp.Grades,Temp.Age);
}
}
}
}
}
[解决办法]
换一种思路
const string C_NAME = "NAME ";
const string C_SCORE = "SCORE ";
const string C_AGE = "AGE ";
private void button1_Click(object sender, EventArgs e)
{
DataTable table = new DataTable();
DataColumn column = table.Columns.Add();
column.DataType = typeof(string);
column.ColumnName = C_NAME;
column = table.Columns.Add();
column.DataType = typeof(int);
column.ColumnName = C_SCORE;
column = table.Columns.Add();
column.DataType = typeof(int);
column.ColumnName = C_AGE;

AddNewRow(table, "张三 ", 88, 20);
AddNewRow(table, "李四 ", 79, 21);
AddNewRow(table, "王五 ", 90, 23);
AddNewRow(table, "赵六 ", 90, 22);

DataRow[] rows = table.Select( " ", string.Format( "{0}, {1} ", C_SCORE, C_AGE));

string sFormat = "{0} {1} {2} ";
string line;
foreach (DataRow row in rows)
{
line = string.Format(sFormat,
Convert.ToString(row[C_NAME]),
Convert.ToString(row[C_SCORE]),
Convert.ToString(row[C_AGE]));
Console.WriteLine(line);
}

}

private void AddNewRow(DataTable table, string sName, int iScore, int iAge)
{
DataRow row = table.NewRow();
row[C_NAME] = sName;
row[C_SCORE] = iScore;
row[C_AGE] = iAge;
table.Rows.Add(row);
}
------解决方案--------------------


DataTable dt =new DataTable( "test ");
DataColumn dc1 =new DataColumn( "name ",typeof(string));
DataColumn dc2 =new DataColumn( "arch ",typeof(System.Int32));
DataColumn dc3=new DataColumn( "age ",typeof(System.Int32));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
DataRow dr;
for(int i=0;i <5;i++)
{
dr=dt.NewRow();
dr[0]= "zhang "+i.ToString() ;
dr[1]=80+i;
dr[2]=20+i;
dt.Rows.Add(dr);
}
DataView dv=dt.DefaultView;
dv.Sort = "arch,age ";
[解决办法]
System.Data.DataTable dTable = new DataTable( "ClassPoint ");

dTable.Columns.Add(new DataColumn( "Name ",typeof(string)));
dTable.Columns.Add(new DataColumn( "Point ",System.Type.GetType( "System.Int32 ")));
dTable.Columns.Add(new DataColumn( "Age ",typeof(System.Int32)));

DataRow dRow;

//1
dRow = dTable.NewRow();
dRow[ "Name "] = "zhangyy ";
dRow[ "Point "] = 60;
dRow[ "Age "] = 20;
dTable.Rows.Add(dRow);
//2
dRow = dTable.NewRow();
dRow[ "Name "] = "fengww ";
dRow[ "Point "] = 80;
dRow[ "Age "] = 26;
dTable.Rows.Add(dRow);
//3
dRow = dTable.NewRow();
dRow[ "Name "] = "zhangxh ";
dRow[ "Point "] = 50;
dRow[ "Age "] = 26;
dTable.Rows.Add(dRow);
//4
dRow = dTable.NewRow();
dRow[ "Name "] = "hezhe ";
dRow[ "Point "] = 56;
dRow[ "Age "] = 23;
dTable.Rows.Add(dRow);
//5
dRow = dTable.NewRow();
dRow[ "Name "] = "jiangzm ";
dRow[ "Point "] = 50;
dRow[ "Age "] = 20;
dTable.Rows.Add(dRow);

DataView dView = dTable.DefaultView;
dView.Sort = "Point , Age ";


for(int i = 0; i < dView.Count; i ++)
{
Console.WriteLine(dView[i].Row[ "Name "].ToString()+ " "+dView[i].Row[ "Point "].ToString()
+ " "+dView[i].Row[ "Age "].ToString());
}

Console.ReadLine();
[解决办法]
DataTable dt = new DataTable();
DataColumn dc;
dc=new DataColumn( "name ",typeof(string));
dt.Columns.Add(dc);
dc = new DataColumn( "scroe ", typeof(Int32));
dt.Columns.Add(dc);
dc = new DataColumn( "age ", typeof(Int32));
dt.Columns.Add(dc);
DataRow dr;
dr = dt.NewRow();
dr[ "name "]= "张三 ";
dr[ "scroe "] = 88;
dr[ "age "] = 20;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[ "name "] = "李四 ";
dr[ "scroe "] = 79;
dr[ "age "] = 21;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[ "name "] = "王五 ";
dr[ "scroe "] = 90;
dr[ "age "] = 22;
dt.Rows.Add(dr);
dr = dt.NewRow();


dr[ "name "] = "赵六 ";
dr[ "scroe "] = 90;
dr[ "age "] = 21;
dt.Rows.Add(dr);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.Tables[0].DefaultView.Sort = "scroe,age ";
this.GV.DataSource = ds;
this.GV.DataBind();
[解决办法]
我真是晕了,用得着那么多代码吗!

DataTable dt = ...,//数据都在dt里

dt.DefaultView.Sort = "scroe,age ";



DataView dv = new DataView(dt);
dv.Sort = "scroe,age ";


[解决办法]
最省事的就是用DataTable
它定义了一个Select方法,可以用如下方法
DataTable dt = ...
dt.Select( "条件 ", "排序(例:aa DESC) ");

热点排行