日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

宝剑锋从磨砺出——使用在线评测平台磨砺C#使用能力

發布時間:2023/12/13 C# 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 宝剑锋从磨砺出——使用在线评测平台磨砺C#使用能力 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學數學的時候,我們通常會通過大量的練習題來鞏固所學知識;其實學習程序設計設計語言也不例外。那么如何通過練習去磨礪自己的C#使用能力呢?一個方法是參與到實際的軟件項目開發中,而另一個更加直接的方法則是“做題”。

  去哪里找練習題呢?聽過或接觸過ACM/ICPC(http://cm.baylor.edu)的讀者,應該不會對Online Judge(http://en.wikipedia.org/wiki/Online_judge)(以下簡稱OJ)陌生。OJ是一個在線評測平臺,包含了大量的程序設計題目,在這個平臺上用戶可以提交源代碼,OJ會對其進行編譯和執行,并通過預定義的測試數據來驗證源代碼是否正確。在國內,比較有影響力的OJ有POJ(http://acm.pku.edu.cn/JudgeOnline/)和ZOJ(http://acm.zju.edu.cn/onlinejudge/)等。但可惜地是,它們只支持C、C++、Pascal、Java等,卻沒有給C#一席之地。盡管如此,還是有不少國外的OJ支持著C#。下面我就列舉了三個優秀的在線評測平臺,它們在一定程度上很好地支持了C#。

?

Timus Online Judge



  Timus Online Judge(以下簡稱TOJ) 地址是 http://acm.timus.ru/。它是一個俄羅斯的在線評測平臺,上面匯集了大量程序設計競賽的套題。此外,它也是為數不多一直提供最新C#編譯功能的OJ。下面是TOJ關于支持C#編譯的一些歷史:

  • 2006年12月31日開始支持使用C#源程序提交解題程序;
  • 2008年02月08日以前均在使用Microsoft Visual C# 2005編譯器;
  • 2009年08月04日以前均在使用Microsoft Visual C# 2008編譯器;
  • 2009年08月04日開始至今使用Microsoft Visual C# 2010編譯器

  TOJ服務器目前的C#編譯命令為:

csc /o+ /d:ONLINE_JUDGE /r:System.Numerics.dll

  先簡單介紹一下這個編譯命令什么意思。開頭的csc實質上是csc.exe,它是C#編譯器的名稱,在安裝完.NET Framework之后就可以在安裝目錄找到。后面跟著的一串命令“/o+ /d:ONLINE_JUDGE /r:System.Numerics.dll”是所謂的編譯器參數。

  • “/o”是“/optimize”的簡稱,該選項可以通知CLR在運行時是否優化代碼。這里的“/o+”即為啟用優化,它可以使得輸出文件更小、更快且更有效;
  • “/d”是“/define”的簡稱,它可以用來定義源文件中的一個或多個符號名稱,功能類似于#define預指令定義一個宏。這里的“/d:ONLINE_JUDGE”就是將ONLINE_JUDGE定義為所有源代碼文件中的一個符號。這樣就相當于用戶不需要做任何事情就可以在源程序序中直接使用ONLINE_JUDGE進行一些預處理操作;
  • “/r””是“/reference”的簡稱,該選項可以將指定文件的public類型信息導入到當前項目中,從而可以從指定的程序集文件引用元數據。因此“/r:System.Numerics.dll”就是將System.Numerics.dll程序集導入到當前項目中。為什么非要把這個程序集導入呢?因為.NET Framework 4.0新引入的這個程序集里引入了兩個非常有用的結構,它們就是BigInteger和Complex。前者可以支持任意大的帶符號整數的加減乘除等運算;后者可以支持復數運算。這兩個結構可以給你做題時帶來極大的便利。

  下面讓我們一同走進TOJ,看看如何通過它來提高自己的C#使用能力。首先要做的事情就是在TOJ上注冊一個賬號(http://acm.timus.ru/register.aspx)。注冊完畢會得到一個Judge ID,接著便可以打開“Problem Set”并挑選一道題目進行解答。以1000. A+B Problem(http://acm.timus.ru/problem.aspx?space=1&num=1000)為例:題目大意就是對給定兩個數a和b,輸出它們的和,要求程序必須在1秒內運行完,且最多只能使用16M的內存。讀題完畢,相信大家都可以很輕松地寫出如下代碼:

view source print?
01using System;
02??
03public class TOJ1000Sum
04{
05????private static void Main()
06????{
07????????string[] tokens = Console.ReadLine().Split(' ');
08????????Console.WriteLine(int.Parse(tokens[0]) + int.Parse(tokens[1]));
09????}
10}

  點擊“Sumbit solution”,選擇要提交的源代碼文件或者直接將源程序粘貼到文本框中、填入剛剛申請的Judge ID、選擇“Language”為C#、點擊“Submit”按鈕之后就可以看到評測的結果了,如:

  上述狀態的意思是:RujinCao于2010年8月10日21點35分42秒提交了題號為1000的程序,該程序使用C#語言編寫,運行時間為109毫秒,占用內存613K,最重要的是該程序通過了全部的測試數據!除了Accepted外,你還可能會常常碰到如下的返回狀態:

  • Compilation Error 編譯錯誤
  • Wrong Answer 程序不正確,無法通過全部的測試數據
  • Time limit exceeded 程序運行時間超過了規定的時間限制
  • Memory limit exceed 程序運行內存超過了規定的內存限制
  • Crash 程序運行有異常

  更多信息可以閱讀TOJ的FAQ(http://acm.timus.ru/help.aspx?topic=faq)。

?

TopCoder



  TopCoder網站地址為http://www.topcoder.com/tc 。它是一個美國的網站,主要以競賽形式外包軟件設計、軟件開發等項目。不過這里要介紹的并不是如何開發軟件,而是介紹TopCoder的算法競賽部分。

  首先打開TopCoder網站,點擊右側的“Register Now”或者直接輸入網址https://www.topcoder.com/reg/ 進行注冊。注冊完畢,點擊左上角的“O(n)”圖標,并按照提示安裝必要的Java組件,之后就可以下載并打開TopCoder競技場軟件(TopCoder Arena),如下圖所示:

  輸入注冊號的賬號和密碼,點擊“GO”,會進入到競技場的休息聊天室(Lobby Chat Room),在這里你可以和當前登錄的其他用戶進行聊天(TopCoder用戶分布于世界各個國家)。選擇菜單“Practice Rooms” –> “2. SRMs”,接著挑選要練習的一個場次,如“SRM 454 DIV2”,就可以進入到練習區域(注:SRM全稱為Single Round Match。TopCoder會在每月舉行4到5次的SRM在線競賽,每場競賽分兩個級別:DIV1和DIV2,前者適合于高等級的用戶,后者適合于分數較低的用戶。對于初學者建議選擇DIV2進行練習),如圖:

  接下去選擇“Select one”下拉框,會看到250,500和1000的字樣,這代表了此輪競賽有三個題目,分數分別為250分,500分和1000分,分數越高,難度越大。當用戶打開某一道題目之后,分數就開始自動減少,換句話說,提交源程序越快則分數越高。TopCoder允許用戶多次提交同一道題目,但是每次提交都會扣取一定的分數。下面我們打開250分的題目:

  閱讀完題目大意“Problem Statement”后,就可以在代碼區域“Coding Area”編寫解答程序。要注意地是,TopCoder與普通的OJ不一樣,它要求用戶提交的程序的類名、方法名等必須完全符合題目中的要求。以這道250分的題來說,題目要求我們類名必須為“MinimalDifference”,方法名必須聲明為“int findNumber(int A, int B, int C)”,而且必須是public類型。

  這道題目大意是“給定三個整數A,B和C,要求返回區間[A,B]之間的一個數字X,使得X各位數字之和與C各位數字之和的絕對值最小,如果存在多個這樣的X,返回最小的一個。其中A,B,C的范圍均在[1,1000000000]之間,且保證B減去A的值在[0, 100000]之間。”

  我們可以很輕松地完成下面的代碼(注意:TopCoder中的.NET Framework 版本僅為2.0.50727,因此有許多C#的新特性在這里無法使用):

view source print?
01using System;
02??
03public class MinimalDifference
04{
05????private int GetDigitSum(int n)
06????{
07????????int sum = 0;
08????????while (n != 0)
09????????{
10????????????sum += n % 10;
11????????????n /= 10;
12????????}
13????????return sum;
14????}
15??
16????public int findNumber(int A, int B, int C)
17????{
18????????int sumC = GetDigitSum(C);
19????????int minDiff = int.MaxValue;
20????????int X = A;
21????????for (int i = A; i <= B; i++)
22????????{
23????????????int sum = GetDigitSum(i);
24????????????int diff = Math.Abs(sum - sumC);
25????????????if (diff < minDiff)
26????????????{
27????????????????X = i;
28????????????????minDiff = diff;
29????????????}
30????????}
31????????return X;
32????}
33}

  確保“Language”選擇的是“C#”,之后點擊“Compile”,系統會告訴你編譯是否有問題,如果沒有問題,可以點擊“Submit”提交源代碼(注:這里還有一些其他非常還用的功能,尤其是“Test”,讀者可以自行實踐”)。接下去系統會在聊天區給出這次提交得到的分數,但是盡管如此,我們并不能保證提交的程序一定正確。幸好TopCoder提供了測試功能,點擊菜單上的“Practice options”->“Run System Test”, 如果一切順利,我們會看到一個綠色的分數(如圖所示);否則會看到一個紅色的分數,這說明源程序中有錯誤,需要修改。

  如果讀者實在無法解答某一道題目,一種方法可以通過TopCoder主頁左側欄中的“Competitions->Algorithm->Statistics->Match Editorials ”或直接輸入網址http://www.topcoder.com/wiki/display/tc/Algorithm+Problem+Set+Analysis 中找到對應比賽的解題報告;另外一種方法可以打開Arena中的“Summary”功能查看其他比賽選手的代碼進行學習。

  TopCoder Arena功能豐富,我所介紹的只是冰山一角,更多功能期待讀者們自己去發掘。

?

CodeForces



  Code Forces地址在http://codeforces.com/ 。這是2010年剛興起的一個在線評測網站,由俄羅斯人創建。它綜合了TopCoder和普通OJ的優點:以TopCoder比賽的形式進行,以普通OJ的文件方式提交源程序。下面我將簡單介紹一下如何在CodeForces上使用C#進行練習:
  和前面一樣,首先要做的是注冊一個賬號,CodeForces的注冊網址為http://codeforces.com/register 。注冊完畢之后,我們可以挑選一場比賽進行練習,下面以Codeforces Beta Round#25(Div. 2)為例(http://codeforces.com/contest/25)。點擊右側的“Register for practice”以注冊這次練習。打開B題 Phone numbers(http://codeforces.com/contest/25/problem/B),并仔細閱讀題目。大意就是:“給定一個n位的電話號碼(2?≤?n ≤?100),將其分割成任意兩位或三位的組合以方便記憶。如:7位的電話號碼1198733可以分割為11-987-33或119-87-33或11-98-733,只要輸出一種分割即可。”相信大家可以很輕松地完成如下的類似代碼:

view source print?
01using System;
02??
03public class Codeforces25B
04{
05????public static void Main()
06????{
07????????int n = int.Parse(Console.ReadLine());
08????????string phoneNum = Console.ReadLine();
09????????int i;
10????????for (i = 0; i < n - 3; i += 2)
11????????{
12????????????Console.Write(phoneNum.Substring(i, 2)); Console.Write("-");
13????????}
14????????Console.WriteLine(phoneNum.Substring(i));
15????}
16}

  選擇“Language”為“C# Mono 2.6+”,并選擇要提交的源代碼文件,點擊“Submit”提交之后即可以看到結果,如下:

  這里,讀者們也許會有些疑問,剛剛提到的“C# Mono 2.6+”是何物,它又和微軟的C#有什么關系?其實,C# Mono是微軟C#的一個開源實現,它的目標是跨平臺和跨語言,目前由Novell公司主持。更多關于Mono的信息請關注http://mono-project.com/Main_Page

  當然,除了上面介紹的三個支持C#的在線評測平臺以外,還有著其他一些OJ也支持C#,不過大體上做題的方式都相近,不再一一列舉。為了幫助讀者們更好地去了解如何在上述的三個OJ中做題,我特意創建了一個Blog(http://newacm.info/)用以跟進分析解答它們中的習題。如果大家有問題,可以直接在Blog中留言或者直接發送郵件給我(newacminfo AT gmail.com)。好了,到這里我相信讀者們對使用C#“做題”練習也有了一定的認識,接下去就是你們在OJ平臺上一展身手的時候了!最后希望大家都能在練習中將自己的C#使用能力磨礪的越來越精純!

轉載于:https://www.cnblogs.com/yqskj/articles/2005052.html

總結

以上是生活随笔為你收集整理的宝剑锋从磨砺出——使用在线评测平台磨砺C#使用能力的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。