首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 几道超难C#笔试题目,高手请进! [已结贴,结贴人:tianwenjun]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 14:26:49 楼主
    1.产生20个不同的两位整数的随机数,并且对它们进行由小到大的排序。特别提醒:程序要自动生成20个不同的整数,而且这些整数必须是两位的,如:3不是两位整数,58是两位整数。

    2.一个6位数乘以一个3位数,得到一个结果。但不清楚6位数中的两个数字是什么,而且结果中有一位数字也不清楚,请您编程,找出问号代表的数字,答案可能有多个。
            12?56?
      X      123
    --------------
      =  154?4987

    3.在1到1,000,000的整数中,找出同时符合以下条件的数:
    a.必须是质数
    b.该数字各位数字之和为偶数,如:数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。

    4.Windows文件系统中,文件夹包含文件夹和文件,请你编写一段程序,找出C盘根目录下面的所有文件及文件夹,包括所有的子文件夹以及子文件夹的所有子孙。
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 17:51:081楼 得分:0
    dataGrid1.SetDataBinding(ds,"ta");
    是这句话吧?我写了阿
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 17:51:332楼 得分:0
    不好意思发错了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:01:453楼 得分:0
    都很简单啊。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:04:414楼 得分:0
    恩超难!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:05:525楼 得分:0
    如果没别的效率上的要求的话 确实不难
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:10:166楼 得分:1
    C# code
    /* 1.产生20个不同的两位整数的随机数,并且对它们进行由小到大的排序。 特别提醒:程序要自动生成20个不同的整数,而且这些整数必须是两位的, 如:3不是两位整数,58是两位整数。 */ using System; using System.Collections.Generic; class Program { static void Main() { int N = 20; Random r = new Random(); List<int> l = new List<int>(N); for (int i = 0; i < N;) { int a = r.Next(10, 100); if (!l.Contains (a)) { l.Add(a); ++i; } } l.Sort(); foreach (int a in l) { Console.WriteLine(a); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:18:167楼 得分:1
    2.一个6位数乘以一个3位数,得到一个结果。但不清楚6位数中的两个数字是什么,而且结果中有一位数字也不清楚,请您编程,找出问号代表的数字,答案可能有多个。
                    12?56?
        X              123
    --------------
        =    154?4987

    for(int i=0;i <9;i++)
    {
      if((120560+i+i*1000)*123==15404987+i*10000)
        Console.WriteLine(i);
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:19:298楼 得分:0
    楼上错了for(int  i=0;i <=9;i++)才对呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:37:149楼 得分:2
    C# code
    /* 3.在1到1,000,000的整数中,找出同时符合以下条件的数: a.必须是质数 b.该数字各位数字之和为偶数, 如:数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。 */ using System; using System.Collections.Generic; class Program { static void Main() { int N = 1000; List<int> primes = new List<int>(); for (int i = 3; i < N; i += 2) { bool isprime = true; foreach (int prime in primes) { if (i % prime == 0) { isprime = false; break; } } if (isprime) primes.Add(i); // Console.Write(i + " "); } List<int> l = new List<int>(); foreach (int prime in primes) { if (IsDigitSumEven(prime)) { l.Add(prime); } } foreach (int prime in l) { Console.Write(prime + " "); } } static bool IsDigitSumEven(int n) { int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return sum % 2 == 0; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:39:2010楼 得分:1
    2.一个6位数乘以一个3位数,得到一个结果。但不清楚6位数中的两个数字是什么,而且结果中有一位数字也不清楚,请您编程,找出问号代表的数字,答案可能有多个。 


    int a, b, c
    a,b c都有可能是1->9,
    是一个排列问题

    int a, b, c

    for(int  a=0;a <10;a++)
    {
      for(int  b=0;b <10;b++) 
      { 
        for(int  c=0;c <10;c++) 
        { 
        if((120560+a+b*1000)*123==15404987+c*10000)
          {
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(b);
        }
        }
      }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:44:4311楼 得分:1
    4.Windows文件系统中,文件夹包含文件夹和文件,请你编写一段程序,找出C盘根目录下面的所有文件及文件夹,包括所有的子文件夹以及子文件夹的所有子孙。

    public static bool PrintFolder(string dir)
    {
    if (Directory.Exists(dir)) 
                    {
                        foreach (string d in Directory.GetFileSystemEntries(dir))
                        {
                            Console.WriteLine(d); 
                            if (Directory.Exists(d))
                                PrintFolder(d);      //递归打印 
                        }                                     
                    }
    }

    PrintFolder("c:\\");
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:45:2512楼 得分:1
    C# code
    /* 3.在1到1,000,000的整数中,找出同时符合以下条件的数: a.必须是质数 b.该数字各位数字之和为偶数, 如:数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。 */ using System; using System.Collections.Generic; class Program { static void Main() { int N = 1000; List<int> primes = new List<int>(); for (int i = 3; i < N; i += 2) { if (!IsDigitSumEven(i)) continue; bool isprime = true; for (int k = 3; k < Math.Sqrt(i); k += 2) { if (i % k == 0) { isprime = false; break; } } if (isprime) { primes.Add(i); Console.Write(i + " "); } } } static bool IsDigitSumEven(int n) { int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return sum % 2 == 0; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:45:4913楼 得分:0
    恩 10楼说的在理 我以为?代表一样的数字呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:50:5914楼 得分:1
    class 遍历文件夹
    {
    static void Main(string[] args)
    {
    FindFile(@"C:\");

    Console.ReadLine();
    }
    /// <summary>
    /// 实现遍历和保存目录和子目录及下属文件
    /// 当没有父目录时,默认为空
    /// </summary>
    /// <param name="strPath">需要保存遍历的目录 </param>
    public static void FindFile(string strPath)
    {
    FindFile(strPath, "");
    }
    /// <summary>
    /// 实现遍历和保存目录和子目录及下属文件
    /// </summary>
    /// <param name="strPath">需要保存遍历的目录 </param>
    /// <param name="strParentPath">它的父目录 </param>
    public static void FindFile(string strPath, string strParentPath)
    {
    //获取该目录下所有的文件名称
    string[] arrayFileNames = System.IO.Directory.GetFiles(strPath);

    //保存该目录名称
    SaveDir(strPath, strParentPath);

    //保存该目录所有的文件名称
    SaveFiles(strPath, arrayFileNames);

    //遍历该目录下所有的文件名称
    foreach(string strFileName in arrayFileNames)
    {
    //遍历文件名称
    }

    //获取该目录下所有的目录名称路径
    string[] arrayFileDirs = System.IO.Directory.GetDirectories(strPath);

    //得到父目录的名称
    string strParentName = (strPath.LastIndexOf(@"\")==0) ? strPath : strPath.Substring(strPath.LastIndexOf(@"\")+1, strPath.Length-strPath.LastIndexOf(@"\")-1));

    //利用递归循环子目录名称
    foreach(string strSubPath in arrayFileDirs)
    {
    FindFile(strSubPath, strPath);
    }
    }
    /// <summary>
    /// 保存单个目录信息
    /// </summary>
    /// <param name="strDirPath">需要保存的目录路径 </param>
    /// <param name="strParentName">父目录的名称 </param>
    public static void SaveDir(string strDirPath, string strParentName)
    {
    //目录编号自动产生
    //目录名称strDirPath.Substring(strDirPath.LastIndexOf(@"\")+1, strDirPath.Length-strDirPath.LastIndexOf(@"\")-1))
    //父目录名称strParentName
    //路径strDirPath
    //备注(自定义,供以后扩充使用)
    }
    /// <summary>
    /// 保存目录下所有文件信息
    /// </summary>
    /// <param name="strDirPath">需要保存的目录路径 </param>
    /// <param name="strFiles">此目录下的所有文件的集合 </param>
    public static void SaveFiles(string strDirPath, string[] strFiles)
    {
    //根据路径找出目录编号,因为此处传入的是绝对路径,而相应的数据库中也保存着绝对路径

    foreach(string strFilePath in strFiles)
    {
    //文件编号自动产生
    //上面找出来的目录编号
    //文件名称strFilePath.Substring(strFilePath.LastIndexOf(@"\")+1, strFilePath.Length-strFilePath.LastIndexOf(@"\")-1))
                    //路径strFilePath
    //备注(自定义,供以后扩充使用)
    }
    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 19:06:3215楼 得分:1
    3.在1到1,000,000的整数中,找出同时符合以下条件的数:
      a.必须是质数
      b.该数字各位数字之和为偶数,
      如:数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。

    */


    算法经改蛮后,很好

    for (int k = 3; k < Math.Sqrt(i); k += 2)
          {
            if (i % k == 0)
            {
              isprime = false;
              break;
            }
          }

    质数所算法是有个公式,
    并且数字很大1,000,000
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 19:34:0116楼 得分:0
    6楼用到的可是泛型?我在Visual Studio.2003下不支持,能改用C#1.1里的知识做出来吗?
    还有一题漏了:
    5.在任意输入的n个数中,找出最大的一个数。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 19:41:1317楼 得分:0
    惊现超难作业贴
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 19:56:3018楼 得分:0
    典型作业贴

    这两天学校开学了,作业贴明显增多了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 20:06:4419楼 得分:0
    果然超难啊。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 20:12:1420楼 得分:0
    这有什么难的,一点水平都没有
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 20:14:3021楼 得分:0
    产生随机数的函数都有了,就算是自己写个生成随机数的函数也不算难啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 21:44:2922楼 得分:0
    123都不难
    第四个不知道用什么类库
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vrhero
    • 等级:
    发表于:2008-02-24 21:47:1123楼 得分:0
    对现在那些一点基础不讲的培训机构—如青鸟之流—出来的来说...是够超难的...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 21:57:0924楼 得分:0
    呵呵,CSDN都快成作业集散地了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 22:15:3925楼 得分:0
    第二题很像道数学题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaojian
    • 等级:
    发表于:2008-02-24 22:50:0826楼 得分:2
    我觉得第二题可以如果所有的?代表同一数字,那用7楼的程序。

    如果三个?代表三个不同的数字,可以简化10楼的程序。
    10楼的程序用了三个for循环嵌套,效率应该不会太高。
    我的想法是,把结果154?4987中的?用0 - 9来做个for循环,在循环里将这个结果除以123,如果得到的结果与被乘数进行比较得出?中代表的数字。

    C# code
    for (int i = 0; i < 10; i++) { if (((15404987 + i * 10000) % 123) == 0) { //求余,确保能被123整除 string sMultiplicand = Convert.ToString((15404987 + i * 10000) / 123); //得出被乘数 if (sMultiplicand.Length == 6 && sMultiplicand.Substring(0, 2) == "12" && sMultiplicand.Substring(3, 2) == "56") { Console.WriteLine(sMultiplicand.Substring(2, 1)); Console.WriteLine(sMultiplicand.Substring(5, 1)); Console.WriteLine(i.ToString()); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 23:09:0127楼 得分:1
                    12?56?
        X              123
    --------------
        =    154?4987

    先把问号替换成0
    120560*123 + X*123 = 15404987 + Y
    576107 + X*123 = Y


    X=U*1000+V*1; (-1 <U,V,W <10)
    Y=W*10000



    W*10000-U*123000-V*1=576107

    用循环遍历U,V,W求解行了。

    for(int W=0;W <10;W++)
      for(int U=0;U <10;U++)
      {
        if (W*10000-U*123000 <576107)break;
        for(int V=0;V <10;V++)
        {
          if(W*10000-U*123000-V*1==576107)
          {
            ...
          }
        }
      }


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 23:15:4528楼 得分:0
    呵呵,主要是算法,自己写吧!
    修改 删除 举报 引用 回复