某校2006程序设计大赛试题

2006程序设计大赛试题
//(考试时间为八个小时),我是做的昏天又暗地啊。不过也没做了几个。觉得自己的信心大受打击.
请各位高人多多指点.!在下多谢了。

说明:共三道试题,第一题满分100分,第二题和第三题满分200分。选手可以选做其中任何一题或两题或三题(全做)。

一、入学考试问题(100分)
某地大学入学考试,相关信息如下:
(1)参加人数:10万。
(2)共有8门考试课程,每门课程满分均为100分,所有课程成绩均进行了4舍5入的处理,考生的总分也照此处理。
(3)所有考生的考试成绩保存在文件scores.txt中,文件格式如下:
每个考生成绩一行,每行格式如下:最开始为考生姓名,然后为每门课程的分数,考生姓名与课程分数之间,以及不同课程分数之间均用一个英文逗号隔开,如:
张三,98,92,60,54,87,75,86,92
个别考生成绩行的格式可能会有误。
(4)共招收三个批次的学生,第一批次8000人,第二批次21000人,第三批次33000人。录取顺序为:第一批次,第二批次,第三批次。
程序要求:
(1)确定每一批次的录取分数线,并将批次、分数线、实际录取人数输出到文本文件soutput.txt中,每一批次录取信息占一行,格式自定。确定分数线时,如果在分数线处有多名考生,则将这些考生全部录取,即每一批次的实际录取人数可能会超过预定人数。例如:假定在确定第一批次分数线时,有7800人的总分高于等于750分,有8050人的总分高于等于749分,则第一批次分数线应确定为749分,实际录取人数为8050人。
(2)如果考生成绩行的格式不对,则丢弃该考生的成绩,不作为确定分数线的依据,但要求将该考生姓名输出到文本文件serror.txt中,格式自定。
(3)将总分为650分的考生姓名输出到文本文件soutput.txt中,格式自定。
(4)将第三批次录取的所有考生的平均成绩(4舍5入)输出到文本文件soutput.txt中,格式自定。
(5)要求将下面两个时间值(单位为秒)输出到文件soutput.txt的最后:从打开scores.txt文件到读完所有考生成绩的时间;从打开scores.txt文件到程序结束的时间。

二、括号嵌套问题(200分)
某个序列完全由圆括号组成,一个“(”和一个“)”称为一对括号,且序列中的括号成对出现。设n为序列中出现的括号对数,k为序列中括号的最大嵌套深度;那么,序列“((()()()))()(())”的n为8,k为3。
1、请编程判断任意给定的圆括号序列,是否是一个深度为k的序列。
   要求:(1)先输入嵌套深度k,然后输入任意一个序列,最后给出判定结果(是,不是,或者输入序列中的括号不配对)
        (2)可以反复输入数据,当k为0时,程序结束。while(k!=0)

输入示例:
3
((()()()))()(())
2
((()()()))()(())
5
(()()()))()((((()))))

输出的判定结果:
测试1:YES
测试2:NO
测试3:括号不配对

2、编程输出括号对数为n,嵌套深度为k的所有序列。(1<=k<=n<=10)
比如,当n=3,k=2时,共有3个嵌套深度为2的序列,即“()(())”、“(()())”、“(())()”。
   要求:(1)每一个输出序列单独占一行;并在末尾输出“×对括号,×层嵌套问题,共求出×××种序列”。
        (2)可以反复输入数据,当k>n时,程序结束。

输出结果示例(n=5,k=3):
  1:   ((()()()))
  2:   ((()())())
  3:   ((()()))()
  4:   ((())(()))
  5:   ((())()())
  6:   ((())())()
  7:   ((()))(())
  8:   ((()))()()
  9:   (()(()()))
 10:   (()(())())
 11:   (()(()))()
 12:   (()()(()))
 13:   (())((()))
 14:   ()((()()))
 15:   ()((())())
 16:   ()((()))()
 17:   ()(()(()))
 18:   ()()((()))
5对括号,3层嵌套问题,共求出18种情况

3、求解括号对数为n,嵌套深度为k的序列的总数(不输出具体序列)。(1<=k<=n<=30)
输入示例:
3  2
15  3
20  11
输出结果:
3  2:3种
15  3:497845种
2011:94817125种

三、公司工问题(200分)
某公司(员工不超过5000)需要能够尽可能快的查找到某个员工的情况,从节约成本考虑,不使用数据库,公司中的员工具有行政隶属关系,就是说此公司的每个员工有且只有一个直接上级(公司总裁无上级),公司人员分为三类职称,高级职称,中级职称和初级职称,每个员工的基本数据为编号(非零),姓名,性别,身高,体重,职称六项,对于高级职称人员(职称信息编码为1)来说还需要具有工作年限信息,对于中级职称人员(职称信息编码为2)需要具有学历信息,对于初级职称人员(职称信息编码为3)需要具有年龄信息;
    输入信息文件为in.txt,数据信息的格式如下:如果高级职称人员,那么年龄和学历字段为#(表示不存在此两项信息),如果为中级职称人员那么工作年限和年龄字段为#,对于初级职称人员,那么工作年限信息和学历信息字段为#,公司总裁的直接上级编码为0,。
注:职称信息的编码表示为:1、2、3
    学历信息的编码表示为:001、002、003、004、005、006、007、008
    每两个数据项间使用空格分开。
编号   姓名   性别  身高   体重   职称  直接上级编号  工作年限 学历信息 年龄
X(x>=1) aaa    男    178    98     1         0          8       #         #
                       …………………
   23      bbb   女     156    50     2         12        #        003       #
要求能够输入任意编号查找此编号对应的员工并打印此员工的信息、及其直接上级、直接下级、所有下属的信息,打印完毕后并提示用户下一查询输入信息,如果此编号对应的人员不存在,则也提示用户重新输入;
输出到屏幕,格式为:
输入人员编号为:
12345
查找到的员工信息输出格式为:
编号   姓名   性别  身高   体重   职称  直接上级编号  工作年限 学历信息 年龄
直接上级信息输出格式为:
编号   姓名   性别  身高   体重   职称  直接上级编号  工作年限 学历信息 年龄
直接下级信息输出格式为:
编号   姓名   性别  身高   体重   职称  直接上级编号  工作年限 学历信息 年龄
C
所有下级信息输出格式为:
编号   姓名   性别  身高   体重   职称  直接上级编号  工作年限 学历信息 年龄
C
D
E
F
G

//结束 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

//某地大学入学考试,相关信息如下:
//(1)参加人数:10万。
//(2)共有8门考试课程,每门课程满分均为100分,所有课程成绩均进行了4舍5入的处理,考生的总分也照此处理。
//(3)所有考生的考试成绩保存在文件scores.txt中,文件格式如下:
//每个考生成绩一行,每行格式如下:最开始为考生姓名,然后为每门课程的分数,考生姓名与课程分数之间,
//以及不同课程分数之间均用一个英文逗号隔开,如:
//张三,98,92,60,54,87,75,86,92
//个别考生成绩行的格式可能会有误。
//(4)共招收三个批次的学生,第一批次8000人,第二批次21000人,第三批次33000人。录取顺序为:
//第一批次,第二批次,第三批次。
//程序要求:
//(1)确定每一批次的录取分数线,并将批次、分数线、实际录取人数输出到文本文件soutput.txt中,
//每一批次录取信息占一行,格式自定。确定分数线时,如果在分数线处有多名考生,则将这些考生全部录取,
//即每一批次的实际录取人数可能会超过预定人数。例如:假定在确定第一批次分数线时,有7800人的总分高于等于750分,
//有8050人的总分高于等于749分,则第一批次分数线应确定为749分,实际录取人数为8050人。
//(2)如果考生成绩行的格式不对,则丢弃该考生的成绩,不作为确定分数线的依据,
//但要求将该考生姓名输出到文本文件serror.txt中,格式自定。
//(3)将总分为650分的考生姓名输出到文本文件soutput.txt中,格式自定。
//(4)将第三批次录取的所有考生的平均成绩(4舍5入)输出到文本文件soutput.txt中,格式自定。
//(5)要求将下面两个时间值(单位为秒)输出到文件soutput.txt的最后:
//从打开scores.txt文件到读完所有考生成绩的时间;从打开scores.txt文件到程序结束的时间。

//最后生成3个文件
//scores.txt
//soutput.txt
//serror.txt

一、入学考试问题
namespace CS2006_1
{
    class Program
    {
        const int NUMBER_OF_EXAMINEE = 100000;
        static int[] Scores = new int[801];
        //函数create_scores创造考生成绩
        //返回值bool型,成功创立返回true,否则返回false
        static bool create_scores()
        {
            try
            {
                using (StreamWriter sw = new StreamWriter("scores.txt"))
                {
                    Random r = new Random();
                    for (int i = 1; i < NUMBER_OF_EXAMINEE + 1; i++)
                    {
                        sw.WriteLine("Examinee" + i.ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString() + "," + r.Next(100).ToString());
                    }
                }
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(@"The file scores.txt can't be write:!");
                Console.WriteLine(e.Message);
                return false;
            }
        }

        //录取考生
        static void matriculate()
        {
            try
            {
                using (StreamReader sr = new StreamReader("scores.txt"))
                {
                    String line;
                    // Read and display lines from the file until the end of
                    // the file is reached.
                    int score;
                    char[] separator ={ ',' };
                    string[] examinee;
                    while ((line = sr.ReadLine()) != null)
                    {
                        score = 0;
                        examinee = line.Split(separator);
                        if (examinee.Length == 9)
                        {
                            for (int i = 1; i < 9; i++)
                            {
                                score += Convert.ToInt32(examinee[i]);
                            }
                            Scores[score]++;
                        }
                        else
                        {
                            try
                            {
                                using (FileStream aFile = new FileStream("serror.txt", FileMode.OpenOrCreate))
                                {
                                    using (StreamWriter sw = new StreamWriter(aFile))
                                    {
                                        sw.WriteLine(examinee[0]);
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(@"The file serror.txt ERROR:");
                                Console.WriteLine(e.Message);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(@"The file scores.txt can't be read:");
                Console.WriteLine(e.Message);
            }
            //int totalNum = 0;
            //int i = 800;
            //int j = 0;
            for (int i = 800, j = 1, totalNum = 0; (i > -1) && (j != 4); i--)
            {
                totalNum += Scores[i];
                if (((j == 1) && (totalNum >= 8000)) || ((j == 2) && (totalNum >= 29000)) || ((j == 3) && (totalNum >= 62000)))
                {
                    printS(j, i, totalNum);
                    j++;
                }
            }
            try
            {
                using (StreamWriter sw = File.AppendText("soutput.txt"))
                {
                    sw.WriteLine("650 score " + Scores[650]);
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(@"The file soutput.txt ERROR:");
                Console.WriteLine(e.Message);
            }
        }
        static void printS(int j, int score, int totalNum)
        {
            try
            {
                using (StreamWriter sw = File.AppendText("soutput.txt"))
                {

                    sw.WriteLine(j.ToString() + "," + score.ToString() + "," + totalNum.ToString());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(@"The file soutput.txt ERROR:");
                Console.WriteLine(e.Message);
            }
        }

        static void Main(string[] args)
        {
            DateTime stardt = DateTime.Now;
            if (create_scores())
            {
                matriculate();
                TimeSpan ts = DateTime.Now.Subtract(stardt);
                double count = ts.TotalSeconds;
                try
                {
                    using (StreamWriter sw = File.AppendText("soutput.txt"))
                    {
                        sw.WriteLine(count.ToString() + " Seconds");
                    }

                }
                catch (Exception e)
                {
                    Console.WriteLine(@"The file soutput.txt ERROR:");
                    Console.WriteLine(e.Message);
                }
            }
        }
    }
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值