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

得到長度
  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>
            永久域名在线精品| 欧美在线啊v| 欧美天堂亚洲电影院在线观看 | 久久精品国产第一区二区三区| 欧美激情亚洲自拍| 欧美成人一品| 亚洲国产高清高潮精品美女| 亚洲欧美精品在线观看| 亚洲欧美综合v| 久久精品亚洲乱码伦伦中文 | 亚洲性人人天天夜夜摸| 亚洲一区二区少妇| 久久国产成人| 欧美精品免费播放| 国产精品免费福利| 狠狠色综合一区二区| 亚洲人精品午夜| 一区二区三区高清在线| 性感少妇一区| 欧美成人精品不卡视频在线观看| 亚洲大片在线观看| 一区二区欧美亚洲| 久久精品1区| 欧美欧美全黄| 国产一区清纯| 99re热这里只有精品视频 | 亚洲欧美日韩系列| 久久亚洲春色中文字幕| 亚洲高清毛片| 亚洲一区在线看| 麻豆精品视频在线观看| 欧美午夜免费| 亚洲第一中文字幕在线观看| 一二三四社区欧美黄| 久久精品伊人| 亚洲精品在线一区二区| 久久精品人人做人人爽| 欧美色区777第一页| 精品91在线| 午夜精品一区二区三区电影天堂| 美女精品视频一区| 中日韩在线视频| 裸体素人女欧美日韩| 国产精品系列在线播放| 99re6热只有精品免费观看| 欧美专区中文字幕| 亚洲国产精品va在线看黑人动漫| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲黄色天堂| 久久国产精品一区二区| 亚洲国产免费看| 久久久国产成人精品| 国产精品欧美激情| 亚洲天堂男人| 亚洲人成网站精品片在线观看| 欧美在线视频一区二区三区| 欧美午夜电影一区| 亚洲视频免费看| 日韩视频免费在线观看| 欧美精品在线观看| 亚洲精品小视频| 欧美激情在线狂野欧美精品| 久久久午夜视频| 激情综合自拍| 蜜桃伊人久久| 久热精品视频在线免费观看| 精久久久久久| 欧美成人精品激情在线观看| 久久视频国产精品免费视频在线| 国产欧美精品日韩精品| 欧美一区二区网站| 香蕉视频成人在线观看| 国产日韩欧美麻豆| 久久久人成影片一区二区三区观看 | 亚洲国产高清aⅴ视频| 久久久蜜桃一区二区人| 久久人人爽人人爽| 亚洲毛片在线观看| 中文一区二区在线观看| 国产日韩精品久久久| 美日韩精品免费| 欧美久久电影| 欧美在线你懂的| 久久影院午夜论| 亚洲调教视频在线观看| 亚洲综合色自拍一区| 国产欧美69| 欧美成人午夜激情| 欧美深夜影院| 久久免费视频在线| 欧美高清视频一区二区三区在线观看| 91久久极品少妇xxxxⅹ软件| 亚洲狠狠婷婷| 亚洲乱码视频| 亚洲视频一区在线| 午夜精品视频| 亚洲日本欧美日韩高观看| 日韩视频在线观看免费| 国产伦精品一区二区三区照片91 | 国产精品乱码一区二三区小蝌蚪 | 久久精品官网| 老司机免费视频一区二区| 一卡二卡3卡四卡高清精品视频| 亚洲午夜在线| 亚洲裸体在线观看| 午夜在线观看免费一区| 日韩视频一区二区| 久久电影一区| 午夜精品免费在线| 欧美国产日本| 久热精品在线视频| 国产精品毛片在线看| 亚洲高清视频在线| 国产午夜精品一区二区三区欧美 | 国产噜噜噜噜噜久久久久久久久 | 国产乱码精品一区二区三区忘忧草 | 99精品国产高清一区二区| 国语自产精品视频在线看抢先版结局 | 亚洲淫性视频| 欧美激情bt| 欧美 亚欧 日韩视频在线| 国产欧美日韩另类视频免费观看| 亚洲国产免费看| 亚洲国产清纯| 久久久水蜜桃| 猛男gaygay欧美视频| 国产一区二区三区最好精华液| 一区二区三区www| 一二三四社区欧美黄| 欧美日韩国产区| 亚洲九九九在线观看| 一区二区三区**美女毛片| 女人色偷偷aa久久天堂| 欧美私人啪啪vps| 日韩一级精品视频在线观看| 久久人人97超碰国产公开结果| 欧美在线视频在线播放完整版免费观看| 欧美激情欧美狂野欧美精品| 欧美激情影音先锋| 亚洲美女在线一区| 欧美黄色影院| 亚洲精品小视频在线观看| 亚洲精品一区二区三| 麻豆久久精品| 欧美成人免费播放| 亚洲国产精品精华液网站| 久久久噜噜噜久久中文字幕色伊伊| 欧美在线资源| 很黄很黄激情成人| 久热re这里精品视频在线6| 欧美成年网站| 亚洲精品综合| 欧美日韩天天操| 亚洲夜晚福利在线观看| 欧美中文字幕精品| 国外成人免费视频| 欧美大色视频| 在线亚洲激情| 久久久久久一区二区三区| 在线成人中文字幕| 欧美日韩国产成人在线观看| 一区二区三区波多野结衣在线观看| 亚洲制服少妇| 国产一区二区精品久久| 久久亚洲精品欧美| 99国产精品久久久久久久成人热| 亚洲欧美日韩国产综合| 国内一区二区三区| 欧美岛国激情| 亚洲欧美日本日韩| 亚洲电影毛片| 亚洲欧美日韩区| 影音先锋一区| 欧美视频中文字幕| 久久人人97超碰精品888| 99精品视频网| 蜜桃av综合| 午夜精品区一区二区三| 亚洲国产美国国产综合一区二区| 欧美三级不卡| 久久亚洲一区| 亚洲欧美日韩精品一区二区| 欧美成人在线免费视频| 午夜视频一区在线观看| 亚洲人成人77777线观看| 国产伦精品免费视频| 欧美日韩成人在线播放| 久久久视频精品| 亚洲一区二区三区免费观看| 欧美激情一区二区三区在线视频| 亚洲欧美日韩综合| 亚洲精品一区二区三区四区高清 | 99re国产精品| 伊人精品视频| 国产老女人精品毛片久久| 欧美精彩视频一区二区三区| 欧美制服丝袜第一页| 亚洲午夜久久久久久尤物| 亚洲国产欧美日韩另类综合| 久久青青草综合|