鄙人雖然是乙個非主流的.net程式設計師,在工作之餘,喜愛演算法。 我覺得這個題目有點意思,故而分享給大家,我想到兩種方法,提供大家,希望對大家起了乙個開闊思路的作用。 更重要想談一談演算法中的分治演算法。
首先,題目是那樣的:
請編寫程式,找出下面「輸入資料及格式」中所描述的輸入資料檔案中最大重疊區間的大小。
對乙個正整數n,如果n在資料檔案中某行的兩個正整數(假設為a和b)之間,即a<=n<=b或a>=n>=b,則n屬於該行;如果n同時屬於行i和j,則i和j有重疊區間;重疊區間的大小是同時屬於行i和j的整數個數。
例如,行(10 20)和(12 25)的重疊區間為[12 20],其大小為9;行(20 10)和(12 18)的重疊區間為[10 12],其大小為3;行(20 10)和(20 30)的重疊區間大小為1。
評分標準:程式輸出結果必須正確,記憶體使用必須不超過256mb,程式的執行時間越快越好。
這是乙個很簡單的演算法(初中的不等式知識),可以說球最大子串的乙個但裡面的將乙個分類的思想體現的淋漓盡致。
老樣子,還是第一步,分析解決問題的思路。
乙個區間是[a,b](a第一步如果b
第二步如果d
第三步 如果a,b是c→d子鏈。其相連的區間是b-a+1
第四步 如果c,d是a→b子鏈。其相連的區間是c-d+1
第五步 如果相交的 其相連的區間是b-c+1
第六步 如果是相交 其相連的區間是d-a+1
那思路寫出來了,源**如下:
1 //string 的變數
2 string str = string.empty;
3 //string到 泛型陣列
4 liststrs=new list();
5 int i = 0;
6 while (i<3)
7
14 int count = 0;
15 int counts = new int[i];
16 for (int j = 0; j < strs.count; j++)
17
30 //第二種的方法
31 else if (checkint(temp4,temp1)>0)
32
36 //第三種的方法
37 else if (checkint(temp2, temp4)>=1&&checkint(te***,temp1)>=1)
38
42 //第四種的方法
43 else if (checkint(temp2, temp4)<=1 && checkint(te***, temp1) <= 1)
44
48 //第五種的方法
49 else if (checkint(temp2, temp4) >=1 && checkint(te***, temp1) <= 1)
50
54 else if (checkint(temp2, temp4) <=1 && checkint(te***, temp1) >= 1)
55
59 }
60 }
61 //列印情況
62 for (int j = 0; j < counts.length; j++)
63 64 console.writeline(counts[j]);
65 }
66 console.readkey();
public static int checkint(int a,int b)
checkint方法用來返回兩個區間的之差。
我這道題目,考慮各種的情況。 應用了分類的情況。 這個分類的思想了不光在這個題目中有了,可以說在程式設計過程中遍地都是。
先不來說,那個題目好嗎?你看看了,程式設計的最基本的三種結構,順序,選擇,迴圈。這個選擇中的無論是if.........else 結構,還是switch..................case 結構。這個結構,就是分類思想。
在比如專案中,乙個登入的時候, 你要考檢測使用者名稱是否存在, 還要檢測登入是否成功的情況, 如果登入不成功的情況,就跳轉不同的頁面。如果登入成功,又跳轉到那個頁面。 等等多種情況,都是要你考慮各種各樣的情況。
這就是我的一點點的感悟。
由一道百度之星題目寫起 談談程式設計中的分類的思想
鄙人雖然是乙個非主流的.net程式設計師,在工作之餘,喜愛演算法。我覺得這個題目有點意思,故而分享給大家,我想到兩種方法,提供大家,希望對大家起了乙個開闊思路的作用。更重要想談一談演算法中的分治演算法。首先,題目是那樣的 請編寫程式,找出下面 輸入資料及格式 中所描述的輸入資料檔案中最大重疊區間的大...
百度之星的一道題
乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸出上列印出符合題目描述的全部正整數...
百度之星程式設計大賽題目
輸入格式 輸入的第一行只有乙個整數n,表示購置水果的組數。接下來的n行表示水果的到達時間 取走時間 時間用1200到1900之間的正整數表示,保證取走時間大於到達時間 剩下的字串以空格分割每一種水果。如 1400 1600 雪梨 水蜜桃 表示下午兩點到四點 包含兩點和四點這兩個時間點 雪梨和水蜜桃會...