青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

得到長度
  1. %x="abcd"
  2. #方法一
  3. %expr length $x
  4. 4
  5. # 方法二
  6. %echo ${#x}
  7. 4
  8. # 方法三
  9. %expr "$x" : ".*"
  10. 4
  11. # expr 的幫助
  12. # STRING : REGEXP   anchored pattern match of REGEXP in STRING
復制代碼


查找子串
  1. %expr index  $x "b"
  2. 2
  3. %expr index  $x "a"
  4. 1
  5. %expr index  $x "b"
  6. 2
  7. %expr index  $x "c"
  8. 3
  9. %expr index  $x "d"
  10. 4
復制代碼


得到子字符串
  1. # 方法一
  2. # expr <string> startpos length
  3. %expr substr "$x" 1 3
  4. abc
  5. %expr substr "$x" 1 5
  6. abcd
  7. %expr substr "$x" 2 5
  8. bcd
  9. # 方法二
  10. # ${x:pos:lenght}
  11. %echo ${x:1}
  12. bcd
  13. %echo ${x:2}
  14. cd
  15. %echo ${x:0}
  16. abcd
  17. %echo ${x:0:2}
  18. ab
  19. %pos=1
  20. %len=2
  21. %echo ${x:$pos:$len}
  22. bc
復制代碼


匹配正則表達式
  1. # 打印匹配長度
  2. %expr match $x "."
  3. 1
  4. %expr match $x "abc"
  5. 3
  6. %expr match $x "bc"
  7. 0
復制代碼


字符串的掐頭去尾
  1. %x=aabbaarealwwvvww
  2. %echo "${x%w*w}"
  3. aabbaarealwwvv
  4. %echo "${x%%w*w}"
  5. aabbaareal
  6. %echo "${x##a*a}"
  7. lwwvvww
  8. %echo "${x#a*a}"
  9. bbaarealwwvvww
復制代碼

其中 , # 表示掐頭, 因為鍵盤上 # 在 $ 的左面。
其中 , % 表示%,  因為鍵盤上 % 在 $ 的右面。
單個的表示最小匹配,雙個表示最大匹配。
也就是說,當匹配的有多種方案的時候,選擇匹配的最大長度還是最小長度。

字符串的替換
  1. %x=abcdabcd
  2. %echo ${x/a/b} # 只替換一個
  3. bbcdabcd
  4. %echo ${x//a/b} # 替換所有
  5. bbcdbbcd
復制代碼

不可以使用 regexp , 只能用 * ? 的文件擴展方式。
posted @ 2010-06-22 18:44 c++ 學習 閱讀(232) | 評論 (0)編輯 收藏
 
- You're given the following program:
--------------------------------
int main()
{
     printf("TWO\n");
     return 0;
}
---------------------------------
 
Add any code above or below the lines so that the output is
 
ONE
TWO
THREE
Give 10 different ways to do this and which of them are specific to C++?

: just comment it out (already mentioned)
#include <iostream>
int main() { std::cout << "ONE\nTWO\nTHREE\n"; return 0; }
/*
...
*/
 
2: use #if or #ifdef
#include <iostream>
#ifdef foo
...
#else
int main() { std::cout << "ONE\nTWO\nTHREE\n"; return 0; }
#endif
 
3: redefine printf (already mentioned)
#include <iostream>
#define printf(foo) std::cout << "ONE\n" << foo << "THREE\n";
...
 
4: overload printf (already mentioned, c++ specific)
void printf(const char * s);
...
#include <iostream>
void printf(const char * s) { std::cout << "ONE\n" << s << "THREE\n"; }
 
5: template printf (c++ specific)
void foo(const char * s);
template<typename T> void printf(T s) { foo(s); }
...
#include <iostream>
void foo(const char * s) { std::cout << "ONE\n" << s << "THRE\n"; }
 
6: redefine main
#include <iostream>
int foo();
int main() {std::cout << "ONE\n"; foo(); std::cout << "THREE\n"; return 0; }
#define main foo
...
 
7: put main in a namespace (c++ specific)
#include <iostream>
namespace foo {
...
};
int main() { std::cout << "ONE\n"; foo::main(); std::cout << "THREE\n"; return 0; }
 
8: put main in a class or struct (c++ specific)
#include <iostream>
struct foo {
...
};
int main() { foo bar; std::cout << "ONE\n"; bar.main(); std::cout << "THREE\n"; return 0; }
 
9: use #define to remove keywords
#include <iostream>
int main() {
  printf("ONE\n");
#define main() do
#define return
#define int
...
 while (!printf("THREE\n"));
#undef return
  return 0;
}
 
10: abuse a class or struct constructor (c++ specific)
struct printf { printf(const char * s); };
...
#include <iostream>
printf::printf(const char * s) { std::cout << "ONE\n" << s << "THREE\n"; }
 
posted @ 2008-10-11 19:51 c++ 學習 閱讀(331) | 評論 (0)編輯 收藏
 
Construct a circuit which takes three binary inputs, a, b, c, and creates as outputs their complements, a', b', c', (NOT a, NOT b, NOT c) with the restriction that you may only use two inverters (NOT gates).  You are allowed as many AND and OR gates as you wish, but no other gates, besides these and the two inverters, can be used.
 
A neat generalization of this problem is "how many inverters do you need to compute the complements of N inputs", but I do not know the answer to this (I don't even know if the answer is known).

the firs question's answer:
In black below is a circuit for the 3 with 2 case. Its not the smallest possible such circuit but is written as a hint toward the more general case.  
 
Its written in C code for easy verification.
 
 
 1 #include <stdio.h>
 2 void main(){
 3  int a,b,c,x,y,z,g,h,a1,b1,c1,x1,y1,z1;
 4  int i;
 5  for(i=0;i<8;i++){
 6   // set up all possible inputs a,b,c
 7   a = i & 1;
 8   b = (i & 2>> 1;
 9   c = (i & 4>> 2;
10  
11   x = a & b & c;
12   y = a & b | a & c | b & c;
13   z = a | b | c;
14  
15   //Here are our 2 inverters
16   g = !(y);
17   h = !(x | g & z);
18    
19   x1 = g | h;  
20   y1 = g;
21   z1 = g & h;
22   a1 = b & c & x1 | (b | c) & y1 | z1;
23   b1 = a & c & x1 | (a | c) & y1 | z1;
24   c1 = b & a & x1 | (b | a) & y1 | z1;
25  
26   //print outputs to verify
27   printf("%d-->%d   %d-->%d   %d-->%d\n",a,a1,b,b1,c,c1);
28  }
29 

posted @ 2008-10-11 18:17 c++ 學習 閱讀(214) | 評論 (0)編輯 收藏
 
題目:n個數字(0,1,,n-1)形成一個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字(第一個為當前數字本身,第二個為當前數字的下一個數字)。當一個數字刪除后,從被刪除數字的下一個繼續刪除第m個數字。求出在這個圓圈中剩下的最后一個數字。
分析:既然題目有一個數字圓圈,很自然的想法是我們用一個數據結構來模擬這個圓圈。在常用的數據結構中,我們很容易想到用環形列表。我們可以創建一個總共有m個數字的環形列表,然后每次從這個列表中刪除第m個元素。
在參考代碼中,我們用STLstd::list來模擬這個環形列表。由于list并不是一個環形的結構,因此每次跌代器掃描到列表末尾的時候,要記得把跌代器移到列表的頭部。這樣就是按照一個圓圈的順序來遍歷這個列表了。
這種思路需要一個有n個結點的環形列表來模擬這個刪除的過程,因此內存開銷為O(n)。而且這種方法每刪除一個數字需要m步運算,總共有n個數字,因此總的時間復雜度是O(mn)。當mn都很大的時候,這種方法是很慢的。
接下來我們試著從數學上分析出一些規律。首先定義最初的n個數字(0,1,,n-1)中最后剩下的數字是關于nm的方程為f(n,m)
在這n個數字中,第一個被刪除的數字是m%n-1,為簡單起見記為k。那么刪除k之后的剩下n-1的數字為0,1,,k-1,k+1,,n-1,并且下一個開始計數的數字是k+1。相當于在剩下的序列中,k+1排到最前面,從而形成序列k+1,,n-1,0,k-1。該序列最后剩下的數字也應該是關于nm的函數。由于這個序列的規律和前面最初的序列不一樣(最初的序列是從0開始的連續序列),因此該函數不同于前面函數,記為f(n-1,m)。最初序列最后剩下的數字f(n,m)一定是剩下序列的最后剩下數字f(n-1,m),所以f(n,m)=f(n-1,m)
接下來我們把剩下的的這n-1個數字的序列k+1,,n-1,0,k-1作一個映射,映射的結果是形成一個從0n-2的序列:
k+1
    ->    0
k+2
    ->    1

n-1
    ->    n-k-2
0
   ->    n-k-1

k-1
   ->   n-2
把映射定義為p,則p(x)= (x-k-1)%n,即如果映射前的數字是x,則映射后的數字是(x-k-1)%n。對應的逆映射是p-1(x)=(x+k+1)%n
由于映射之后的序列和最初的序列有同樣的形式,都是從0開始的連續序列,因此仍然可以用函數f來表示,記為f(n-1,m)。根據我們的映射規則,映射之前的序列最后剩下的數字f(n-1,m)= p-1 [f(n-1,m)]=[f(n-1,m)+k+1]%n。把k=m%n-1代入得到f(n,m)=f(n-1,m)=[f(n-1,m)+m]%n
經過上面復雜的分析,我們終于找到一個遞歸的公式。要得到n個數字的序列的最后剩下的數字,只需要得到n-1個數字的序列的最后剩下的數字,并可以依此類推。當n=1時,也就是序列中開始只有一個數字0,那么很顯然最后剩下的數字就是0。我們把這種關系表示為:
         0                  n=1
f(n,m)={
         [f(n-1,m)+m]%n     n>1
盡管得到這個公式的分析過程非常復雜,但它用遞歸或者循環都很容易實現。最重要的是,這是一種時間復雜度為O(n),空間復雜度為O(1)的方法,因此無論在時間上還是空間上都優于前面的思路。
思路一的參考代碼:
///////////////////////////////////////////////////////////////////////
// n integers (0, 1,  n - 1) form a circle. Remove the mth from
// the circle at every time. Find the last number remaining
// Input: n - the number of integers in the circle initially
//        m - remove the mth number at every time
// Output: the last number remaining when the input is valid,
//         otherwise -1
///////////////////////////////////////////////////////////////////////
int LastRemaining_Solution1(unsigned int n, unsigned int m)
{
      
// invalid input
      if(n < 1 || m < 1)
            
return -1;
      unsigned 
int i = 0;
      
// initiate a list with n integers (0, 1,  n - 1)
      list<int> integers;
      
for(i = 0; i < n; ++ i)
            integers.push_back(i);
      list
<int>::iterator curinteger = integers.begin();
      
while(integers.size() > 1)
      {
            
// find the mth integer. Note that std::list is not a circle
            
// so we should handle it manually
            for(int i = 1; i < m; ++ i)
            {
                  curinteger 
++;
                  
if(curinteger == integers.end())
                        curinteger 
= integers.begin();
            }

            
// remove the mth integer. Note that std::list is not a circle
            
// so we should handle it manually
            list<int>::iterator nextinteger = ++ curinteger;
            
if(nextinteger == integers.end())
                  nextinteger 
= integers.begin();
            
-- curinteger;
            integers.erase(curinteger);
            curinteger 
= nextinteger;
      }

      
return *(curinteger);
}


思路二的參考代碼:
void circile(int n, int m)
{
    
int num = 0;
    
for(int i = 2; i <= n; i++)
        num 
= (num + m) % i;

    num 
+= 1;

    cout 
<< num << endl;
}



posted @ 2008-10-07 19:16 c++ 學習 閱讀(402) | 評論 (0)編輯 收藏
 
我以前曾經設置過 wget 的代理,~/.wgetrc, 現在設置 apt-get 的代理。
測試了不行,原因一個是字符拷貝的時候,中英文符號轉換的問題,已經改正。
另外 .wgetrc 中代理是 202.xxx.xxx.xxx:xxxx, 而在 apt.conf 中要寫成 http://202.xxx.xxx.xxx:xxxx


FWD:為apt-get設置HTTP代理(使用代理更新Ubuntu的方法)
2008年01月11日 星期五 20:54

方法一

這是一種臨時的手段,如果您僅僅是暫時需要通過http代理使用apt-get,您可以使用這種方式。

在使用apt-get之前,在終端中輸入以下命令(根據您的實際情況替換yourproxyaddress和proxyport)。

export http_proxy=http://yourproxyaddress:proxyport

方法二

這種方法要用到/etc/apt/文件夾下的apt.conf文件。如果您希望apt-get(而不是其他應用程序)一直使用http代理,您可以使用這種方式。

注意: 某些情況下,系統安裝過程中沒有建立apt配置文件。下面的操作將視情況修改現有的配置文件或者新建配置文件。

sudo gedit /etc/apt/apt.conf

在您的apt.conf文件中加入下面這行(根據你的實際情況替換yourproxyaddress和proxyport)。

Acquire::http::Proxy "http://yourproxyaddress:proxyport";

保存apt.conf文件。

方法三

這種方法會在您的主目錄下的.bashrc文件中添加兩行。如果您希望apt-get和其他應用程序如wget等都使用http代理,您可以使用這種方式。

gedit ~/.bashrc

在您的.bashrc文件末尾添加如下內容(根據你的實際情況替換yourproxyaddress和proxyport)。

http_proxy=http://yourproxyaddress:proxyport
export http_proxy

保存文件。關閉當前終端,然后打開另一個終端。

使用apt-get update或者任何您想用的網絡工具測試代理。我使用firestarter查看活動的網絡連接。

如果您為了糾正錯誤而再次修改了配置文件,記得關閉終端并重新打開,否自新的設置不會生效。


from:http://www.stdio.cn/2007/11/proxy-for-apt-get.html
posted @ 2008-07-22 10:43 c++ 學習 閱讀(1175) | 評論 (0)編輯 收藏
 

/etc/network/interfaces
打開后里面可設置DHCP或手動設置靜態ip。前面auto eth0,讓網卡開機自動掛載.

1. 以DHCP方式配置網卡

編輯文件/etc/network/interfaces:
sudo vi /etc/network/interfaces

并用下面的行來替換有關eth0的行:
# The primary network interface - use DHCP to find our address
auto eth0
iface eth0 inet dhcp

用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart
也可以在命令行下直接輸入下面的命令來獲取地址

sudo dhclient eth0

2. 為網卡配置靜態IP地址

編輯文件/etc/network/interfaces:

sudo vi /etc/network/interfaces

并用下面的行來替換有關eth0的行:# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.3.90
gateway 192.168.3.1
netmask 255.255.255.0
#network 192.168.3.0
#broadcast 192.168.3.255

將上面的ip地址等信息換成你自己就可以了.用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart

3. 設定第二個IP地址(虛擬IP地址)

編輯文件/etc/network/interfaces:

sudo vi /etc/network/interfaces

在該文件中添加如下的行:
auto eth0:1
iface eth0:1 inet static
address 192.168.1.60
netmask 255.255.255.0
network x.x.x.x
broadcast x.x.x.x
gateway x.x.x.x

根據你的情況填上所有諸如address,netmask,network,broadcast和gateways等信息.
用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart

4. 設置主機名稱(hostname)

使用下面的命令來查看當前主機的主機名稱:

sudo /bin/hostname

使用下面的命令來設置當前主機的主機名稱:

sudo /bin/hostname newname

系統啟動時,它會從/etc/hostname來讀取主機的名稱.

關于設置主機名稱的更多信息,請訪問這里

5. 配置DNS

首先,你可以在/etc/hosts中加入一些主機名稱和這些主機名稱對應的IP地址,這是簡單使用本機的靜態查詢.

要訪問DNS 服務器來進行查詢,需要設置/etc/resolv.conf文件.
假設DNS服務器的IP地址是192.168.3.2, 那么/etc/resolv.conf文件的內容應為:

search test.com
nameserver 192.168.3.2

/etc/network/interfaces
打開后里面可設置DHCP或手動設置靜態ip。前面auto eth0,讓網卡開機自動掛載.

1. 以DHCP方式配置網卡

編輯文件/etc/network/interfaces:
sudo vi /etc/network/interfaces

并用下面的行來替換有關eth0的行:
# The primary network interface - use DHCP to find our address
auto eth0
iface eth0 inet dhcp

用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart
也可以在命令行下直接輸入下面的命令來獲取地址

sudo dhclient eth0

2. 為網卡配置靜態IP地址

編輯文件/etc/network/interfaces:

sudo vi /etc/network/interfaces

并用下面的行來替換有關eth0的行:# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.3.90
gateway 192.168.3.1
netmask 255.255.255.0
#network 192.168.3.0
#broadcast 192.168.3.255

將上面的ip地址等信息換成你自己就可以了.用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart

3. 設定第二個IP地址(虛擬IP地址)

編輯文件/etc/network/interfaces:

sudo vi /etc/network/interfaces

在該文件中添加如下的行:
auto eth0:1
iface eth0:1 inet static
address 192.168.1.60
netmask 255.255.255.0
network x.x.x.x
broadcast x.x.x.x
gateway x.x.x.x

根據你的情況填上所有諸如address,netmask,network,broadcast和gateways等信息.
用下面的命令使網絡設置生效:
sudo /etc/init.d/networking restart

4. 設置主機名稱(hostname)

使用下面的命令來查看當前主機的主機名稱:

sudo /bin/hostname

使用下面的命令來設置當前主機的主機名稱:

sudo /bin/hostname newname

系統啟動時,它會從/etc/hostname來讀取主機的名稱.

關于設置主機名稱的更多信息,請訪問這里

5. 配置DNS

首先,你可以在/etc/hosts中加入一些主機名稱和這些主機名稱對應的IP地址,這是簡單使用本機的靜態查詢.

要訪問DNS 服務器來進行查詢,需要設置/etc/resolv.conf文件.
假設DNS服務器的IP地址是192.168.3.2, 那么/etc/resolv.conf文件的內容應為:

search test.com
nameserver 192.168.3.2

posted @ 2008-07-22 10:41 c++ 學習 閱讀(962) | 評論 (0)編輯 收藏
 
前一段時間看到一個往年程序競賽的題解, 有一個題目說的是求 100 的階乘末尾有多少個 0. 題解中給出的講解提到, 一個數 n 的階乘末尾有多少個 0 取決于從 1 到 n 的各個數的因子中 2 和 5 的個數, 而 2 的個數是遠遠多余 5 的個數的, 因此求出 5 的個數即可. 題解中給出的求解因子 5 的個數的方法是用 n 不斷除以 5, 直到結果為 0, 然后把中間得到的結果累加. 例如, 100/5 = 20, 20/5 = 4, 4/5 = 0, 則 1 到 100 中因子 5 的個數為 (20 + 4 + 0) = 24 個, 即 100 的階乘末尾有 24 個 0. 其實不斷除以 5, 是因為每間隔 5 個數有一個數可以被 5 整除, 然后在這些可被 5 整除的數中, 每間隔 5 個數又有一個可以被 25 整除, 故要再除一次, ... 直到結果為 0, 表示沒有能繼續被 5 整除的數了.

今天無 意間看到有人問 1000 的階乘有幾位數, 上來就用上面的方法算了一下, 249, 又讀一遍題目, 才發現是求所有的位數, 想了好久也沒有思路, 無奈用 Python 算了一把, 結果有 2568 位, 可是依然不知道如何計算 1000 階乘的位數, 還好通過結果驗證了末尾有 249 個 0 是正確的...
posted @ 2008-06-26 14:23 c++ 學習 閱讀(3036) | 評論 (13)編輯 收藏
 
這是在 2006 年 11 月 17 日瀏覽小百合時得到的,當時上不來,就暫存在我的信箱里了。

南京大學小百合站,Algorithm 版,x->18->1 和 x->18-2。

x->18->1:(兩處紅色標記是我個人加上的,懷疑原文有誤,即若有 10 和 100,則前面不應有 90 和 1800)
令結果為 x
x=log2+log3+...+log9
  +90+log1.1+log1.2+...+log9.9
  +1800+log1.01+log1.02+...+log9.99
  +3
 =∫logx dx (從2到10)
  +90+10∫logx dx(從1.1到9.9)
  +1800+ 100∫logx dx (從1.01到9.99)
  +3
 = ...
后兩次積分上限的不同是考慮到修正

x->18->2:
x=(∫log(x)dx(2--1001)+∫log(x)dx(1--1000))/2
 =((x*log(x)-∫xdlog(x))(2--1001)+(x*log(x)-∫xdlog(x))(1---1000))/2
 =2567.857000.....


我個人的想法:

經過上述兩個方法,我猜想求解一個數的位數可以求解該數對其基數的對數(此處是以 10 為基數的),找了幾個數寫了寫,發現可以:
一個以 b 為基數的數 N,在以 b 為基數的計數系統中的位數 l,可以通過求 N 對 b 的對數求得。
具體為:l=floor[log b (N) + 1],即求對數,結果加 1 后向下取整。
例如:
  • length(123456789)10=floor[lg(123456789)+1]=floor[8.091514977+1 ]=9
  • length(100000000)10=floor[lg(100000000)+1]=floor[8+1]=9
  • length(10101)2=floor[log 2 (23) + 1]=floor[4.523561956+1]=5  (10101)2=(23)10
再回到求解 1000 的階乘的位數上,則根據上面的說明,有:(設 1000 的階乘結果為 N)
length(N)10=floor[lg(N)+1]
           =floor[lg(1*2*3*...*999*1000)+1]
           =floor[lg1+lg2+lg3+...+lg999+lg1000+1]
           =floor[lg2+lg3+...lg999+lg1000+1]    <= lg1=0
這時問題轉到了求解 lg2+lg3+...+lg999+lg1000 的累加上面。

對于這一方面我不是很清楚(高等數學基本都不記得了...),不過根據前面兩篇文章,好像有:
∑(N=2..1000)lgN = ∫lgxdx (x=2..1000)

如果成立的話,則根據 lgx = lnx/ln10 有:
∫lgxdx (x=2..1000) = (1/ln10)*∫lnxdx (x=2..1000)
                   = (1/ln10)*[x*lnx - ∫xd(lnx)] (x=2..1000)
                   = (1/ln10)*[x*lnx - ∫dx] (x=2..1000)
                   = (1/ln10)*[x*lnx - x] (x=2..1000)
                   = x*(lnx - 1)/ln10 (x=2..1000)

然后由牛頓-萊伯尼茨公式可以得到:(也不知道是否能在此處應用...)
∫lgxdx (x=2..1000) = 1000*(ln1000 - 1)/ln10 - 2*(ln2 - 1)/ln10
                   = [1000*(6.907755279 - 1) - 2*(0.693147181 - 1)]/ln10
                   = [1000* 5.907755279 - 2*(-0.306852819)]/2.302585093
                   = [5907.755279 - (- 0.613705639)]/2.302585093
                   = 5908.368984639/2.302585093
                   = 2565.97204707

將結果代回前面的式子:
length(N)10 = floor[2565.97204707 + 1] = 2566

原先通過 Python 計算過 1000 的階乘,位數為 2568 位。

考慮前面推算的過程中把 x=1 時 lg1 略掉了,理論上不應產生區別,但若要是不略掉該項時,則結果變成:
∫lgxdx (x=2..1000) = 1000*(ln1000 - 1)/ln10 - 1*(ln1 - 1)/ln10
                   = [1000*( 6.907755279 - 1) - 1*(0 - 1)]/ln10
                   = [1000*5.907755279 - 1*(-1)]/2.302585093
                   = [5907.755279 + 1]/2.302585093
                   = 5908.755279/2.302585093
                   = 2566.13981258

length(N)10 = floor[2566.13981258 + 1] = 2567

可見結果略有不同,但都與正確結果有一點小偏差,個人認為思路是正確的,方法還有待改進。同時看到第二篇引文的結果非常接近,不過我還不理解,還需在琢磨琢磨。

還要再好好看看高等數學...


posted on 2007-01-11 12:14 ScorpioLove 閱讀(1261) 評論(4)  編輯 收藏 所屬分類: 數據結構與算法
 
把求lgN(N=2.3.4....1000)轉換為積分,這個思路就有誤差吧。
積分是連續的,而這里的N是離散的,所以這里的轉換不合理。
Posted @ 2007-04-18 09:25    回復  引用  查看    
#2樓 
你紅字加的內容不對,不應該乘10和100;
樓上的說的也不對,把不可直接求職的離散轉為積分是基本的方法,只要誤差允許接受就可以,具體可以看CLRS的附錄A
Posted @ 2007-04-24 10:07    回復  引用  查看    
#3樓 [樓主]
謝謝各位回復,同時希望能原諒我不能及時的回復各位。

@ 蔡暉

事實上這個問題,我在計算前也考慮過,確實有誤差,不過就像 wqx 說的,只要誤差可接受就可以了,像這里的誤差相對于實際結果而言是比較小的,可以接受。

@ wqx

關于紅字部分,我在算式前面的括號里注明了,10 和 100 是原來算式里就有的,但我覺得不該加,所以就用紅色標記了一下,可能導致你誤以為是我強調要加上的...

關于 CLRS,我目前正在讀,不過感覺好難啊,好多課后題都不會...
如果可能,希望能和你交流一下^_^。
Posted @ 2007-04-24 13:26    回復  引用  查看    
#4樓 
居然看到了牛頓萊布尼茨公式。。。。。
Posted @ 2007-09-18 17:53    回復  引用  查看   
posted @ 2008-06-26 14:22 c++ 學習 閱讀(1694) | 評論 (0)編輯 收藏
 
#include <string>
#include 
<iostream>
#import 
<msxml4.dll>

void SendData(std::wstring url, std::wstring username, std::wstring password)
{

    HRESULT hr;
    MSXML2::IXMLHTTPRequestPtr pIXMLHTTPRequest;
    MSXML2::IXMLDOMDocumentPtr pXMLDoc;
    std::wstring wvarQuery(L
"username=");
    wvarQuery.append(username);
    wvarQuery.append(L
"&password=");
    wvarQuery.append(password);
    _variant_t vartQueryFields(wvarQuery.c_str());

    
try
    {
        CoInitialize(NULL);
        hr
=pIXMLHTTPRequest.CreateInstance(__uuidof(MSXML2::XMLHTTP));
        SUCCEEDED(hr) 
? 0 : throw hr;

        hr
=pIXMLHTTPRequest->open("POST", url.c_str(), 
            
false);
        SUCCEEDED(hr) 
? 0 : throw hr;
        
//如果要向服務器post數據,這個地方一定要設置為application/x-www-form-urlencoded
        pIXMLHTTPRequest->setRequestHeader("Content-Type""application/x-www-form-urlencoded");

        hr 
= pIXMLHTTPRequest->send( vartQueryFields );
        SUCCEEDED(hr) 
? 0 : throw hr;
        
//拿到返回來的xml數據
        pXMLDoc=pIXMLHTTPRequest->responseXML;
        
//后面就是對拿回來的xml數據進行解析,主要是dom方法
    }
    
catch()
    {
        
if(pIXMLHTTPRequest)
            pIXMLHTTPRequest.Release();
        
if(pXMLDoc)
            pXMLDoc.Release();
        CoUninitialize();
    }
}


int main()
{
    SendData(L
"http://localhost/login.php", L"kenwell", L"kenwell");
}

posted @ 2008-05-21 18:41 c++ 學習 閱讀(4416) | 評論 (0)編輯 收藏
 
#include <string>
std::
string ws2s(const std::wstring& ws)
{
    std::
string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
    setlocale(LC_ALL, "chs");
    
const wchar_t* _Source = ws.c_str();
    size_t _Dsize 
= 2 * ws.size() + 1;
    
char *_Dest = new char[_Dsize];
    memset(_Dest,
0,_Dsize);
    wcstombs(_Dest,_Source,_Dsize);
    std::
string result = _Dest;
    delete []_Dest;
    setlocale(LC_ALL, curLocale.c_str());
    
return result;
}

std::wstring s2ws(
const std::string& s)
{
    setlocale(LC_ALL, 
"chs"); 
    
const char* _Source = s.c_str();
    size_t _Dsize 
= s.size() + 1;
    wchar_t 
*_Dest = new wchar_t[_Dsize];
    wmemset(_Dest, 
0, _Dsize);
    mbstowcs(_Dest,_Source,_Dsize);
    std::wstring result 
= _Dest;
    delete []_Dest;
    setlocale(LC_ALL, 
"C");
    
return result;
}

這些都是最近自己在開發項目中用到的
posted @ 2008-05-21 18:23 c++ 學習 閱讀(29448) | 評論 (2)編輯 收藏
僅列出標題
共3頁: 1 2 3 
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一二三区精品| 亚洲视频免费| 欧美精品一区二区三区一线天视频 | 欧美精品日韩精品| 久久躁狠狠躁夜夜爽| 久久免费视频网| 欧美成人在线免费视频| 欧美日韩国产在线看| 国产精自产拍久久久久久| 国产乱肥老妇国产一区二 | 久久精品天堂| 久久综合伊人77777蜜臀| 久久视频在线看| 欧美四级剧情无删版影片| 国产精品一区久久| 亚洲国产精品日韩| 夜夜嗨av色一区二区不卡| 亚洲一区二区三区四区五区午夜| 欧美一区二区三区四区夜夜大片| 欧美在线视频a| 欧美黄色网络| 亚洲欧美国产日韩中文字幕| 久久人人爽人人爽爽久久| 欧美日韩免费一区二区三区| 国产精品综合色区在线观看| 亚洲国产日韩欧美在线99| 午夜欧美不卡精品aaaaa| 欧美福利一区| 销魂美女一区二区三区视频在线| 猛男gaygay欧美视频| 亚洲黄色影片| 亚洲伊人网站| 欧美第一黄色网| 国产一区二区三区四区三区四| 亚洲日本电影在线| 久久精品国产清高在天天线| 亚洲伦理在线观看| 美女视频网站黄色亚洲| 国产一区二区三区的电影 | 9l国产精品久久久久麻豆| 久久国产福利| 亚洲一区二区免费| 欧美激情久久久久| 亚洲第一狼人社区| 久久婷婷国产麻豆91天堂| 亚洲影院在线| 国产精品捆绑调教| 欧美77777| 免费黄网站欧美| 国产精品theporn88| 亚洲成人在线| 99精品国产在热久久| 国产美女搞久久| 欧美福利视频网站| 国产伦精品免费视频| 欧美韩国在线| 国产午夜精品理论片a级探花| 亚洲第一精品在线| 国产精品视频免费在线观看| 欧美电影在线观看完整版| 欧美午夜a级限制福利片| 美女爽到呻吟久久久久| 国产精品久久久免费| 欧美国产一区二区| 国产日韩亚洲欧美综合| 亚洲精品一区二区三区婷婷月| 国产一区再线| 亚洲一区二区三区免费视频| 亚洲激情在线| 久久久久久69| 久久国产精品网站| 国产精品久久久久久久久久ktv| 欧美激情精品久久久久久大尺度| 国产毛片一区二区| 亚洲亚洲精品在线观看| 日韩视频免费大全中文字幕| 久久狠狠久久综合桃花| 欧美一区国产在线| 国产精品久久久久9999| 亚洲精选一区| 亚洲最快最全在线视频| 欧美sm视频| 欧美国产一区在线| 亚洲福利专区| 六月婷婷久久| 亚洲第一中文字幕| 最新高清无码专区| 免费不卡在线观看av| 蜜臀va亚洲va欧美va天堂| 国产精品一区二区三区观看| 亚洲小说欧美另类社区| 午夜精彩国产免费不卡不顿大片| 欧美日本不卡视频| 亚洲精选视频免费看| 亚洲午夜一二三区视频| 欧美无乱码久久久免费午夜一区 | 久久久久久久精| 国产欧美日韩在线观看| 亚洲欧美日韩国产综合| 亚洲欧美国产精品桃花| 国产精品进线69影院| 亚洲视频精选| 欧美一级在线视频| 国产精品视频成人| 欧美一级视频一区二区| 久久婷婷蜜乳一本欲蜜臀| 在线电影国产精品| 麻豆精品一区二区综合av| 欧美激情麻豆| av成人免费观看| 国产精品国产精品| 亚洲在线1234| 久久久综合视频| 亚洲精品视频中文字幕| 欧美精品一区二区久久婷婷| 亚洲精品久久久久久久久久久| 国产精品99久久久久久白浆小说| 国产精品乱码一区二三区小蝌蚪 | 欧美成人免费一级人片100| 最新亚洲视频| 亚洲综合精品自拍| 国产一区二区精品丝袜| 免费久久99精品国产自在现线| 亚洲伦伦在线| 国产精品日韩久久久久| 欧美中文在线视频| 亚洲大片av| 午夜国产一区| 亚洲第一页中文字幕| 欧美天天视频| 久久久久免费视频| 一本色道久久综合亚洲二区三区| 久久精品视频在线免费观看| 亚洲毛片一区二区| 国产日韩综合| 欧美日韩另类丝袜其他| 久久精品观看| 一区二区三区www| 欧美xxxx在线观看| 午夜日韩在线| 日韩一级成人av| 激情五月综合色婷婷一区二区| 欧美精品videossex性护士| 香港久久久电影| 99在线观看免费视频精品观看| 久久综合影音| 欧美在线视频导航| 亚洲一区二区三区在线播放| 亚洲国产另类久久久精品极度| 国产女主播一区二区三区| 欧美日韩在线免费| 久久亚洲一区| 欧美在线视频播放| 亚洲一区区二区| 亚洲靠逼com| 欧美激情视频在线播放| 久久久久九九九九| 亚洲欧美日韩国产一区二区| 亚洲最黄网站| 亚洲精品视频在线观看网站| 在线不卡欧美| 黄色精品一二区| 国内精品美女av在线播放| 国产精品视频一区二区高潮| 欧美日韩在线精品一区二区三区| 欧美高清视频一区| 免费亚洲婷婷| 欧美99久久| 欧美大香线蕉线伊人久久国产精品| 久久天天综合| 久久在线免费观看| 久久综合精品国产一区二区三区| 欧美一区日韩一区| 性色av一区二区三区| 午夜老司机精品| 午夜久久一区| 久久久久**毛片大全| 欧美一区二区三区日韩| 午夜一区在线| 欧美在线一二三| 久久精品二区| 久久夜色精品| 欧美大胆a视频| 欧美人成在线视频| 欧美色网一区二区| 国产精品美女一区二区在线观看| 国产精品家教| 国户精品久久久久久久久久久不卡 | 欧美粗暴jizz性欧美20| 欧美精品三区| 欧美色123| 国产欧美一区二区视频| 国产日产欧美精品| 韩日精品在线| 91久久精品视频| 宅男精品视频| 欧美在线免费观看亚洲| 噜噜噜久久亚洲精品国产品小说| 欧美二区乱c少妇| 亚洲精品综合精品自拍|