1
int B_search(int a[],int key,int size)
2

{
3
if(size<0)
4
return -1;
5
int mid=size/2;
6
if(a[mid]==key)
7
return mid;
8
else if(a[mid]>key)
9
return B_search(a,key,mid-1);
10
else if(a[mid]<key)
11
return B_search(a+mid+1,key,size-(mid+1))+mid+1;
12
}
1
#include <stdio.h>
2
#include <algorithm>
3
using namespace std;
4
#define MAX 1000
5
int buf[MAX];
6
void merge(int a[],int l,int m,int r)
7

{
8
int pa=l;
9
int pb=m+1;
10
int k=0;
11
12
while(pa<=m && pb<=r)
13
{
14
if(a[pa]<a[pb])
15
buf[k++]=a[pa++];
16
else
17
buf[k++]=a[pb++];
18
}
19
while(pa<=m)
20
buf[k++]=a[pa++];
21
while(pb<=r)
22
buf[k++]=a[pb++];
23
24
for(int i=0;i<k;i++)
25
a[l+i]=buf[i];
26
}
27
void mergeSort(int a[],int l,int h)
28

{
29
if(l<h)
30
{
31
int m=(l+h)/2;
32
mergeSort(a,l,m);
33
mergeSort(a,m+1,h);
34
merge(a,l,m,h);
35
}
36
}
37
void printIntArr(int n)
38

{
39
printf("%d ",n);
40
}
41
int main()
42

{
43
int a[10]=
{2,89,-1,8,0,7,13,0,11,3};
44
mergeSort(a,0,9);
45
//merge(a,0,4,9);
46
std::for_each(a,a+10,printIntArr);
47
return 0;
48
}
本來(lái)是寫在CSDN上的,現(xiàn)在轉(zhuǎn)一下過(guò)來(lái)。
創(chuàng)建一個(gè)透明窗體,一種方法是設(shè)置windows下窗體的一個(gè)擴(kuò)展窗口風(fēng)格,在WINNT及以后,Windows開始支持用來(lái)創(chuàng)建透明窗體的一個(gè)API函數(shù),先看一個(gè)效果圖:

這一個(gè)GDI繪圖的數(shù)字時(shí)鐘的窗口。實(shí)現(xiàn)了窗口的半透明效果。實(shí)現(xiàn)方法如下:
1
#define _WIN32_WINNT 0x5000 //定義WINNT的宏
2
//
3
hwnd = CreateWindow(szAppName,TEXT("Noble Qiao~"),
4
WS_POPUP | WS_SYSMENU | WS_VISIBLE ,
5
::GetSystemMetrics(SM_CXSCREEN)/2,
6
::GetSystemMetrics(SM_CYSCREEN)/2,
7
160,45,
8
NULL,NULL,hInstance,NULL);
9
//
10
::SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE)|WS_EX_LAYERED);
11
SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);
SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);設(shè)置了窗體的屬性,為透明效果,其中第二個(gè)參數(shù)為alpha值,即透明度。
另外,我在使用一個(gè)游戲引擎HGE做應(yīng)用時(shí),發(fā)現(xiàn)了關(guān)于這個(gè)API函數(shù)的一個(gè)問(wèn)題,我把這個(gè)函數(shù)的調(diào)用放在初始化一些用于渲染場(chǎng)景的指針變量之前時(shí),在 winxp下運(yùn)行就會(huì)運(yùn)行出錯(cuò),而在 Vista 下完全正常。
我猜想在XP下,這個(gè)函數(shù)被調(diào)用后,直接調(diào)用wndproc,此時(shí)如果游戲資源(如紋理)沒(méi)有被初始化,就會(huì)出錯(cuò);而在Vista中沒(méi)有這個(gè)問(wèn)題,可能是Microsoft對(duì)這個(gè)API函數(shù)做了一定修改。
Visual Studio 6.0雖然是比較老(1998)的開發(fā)工具了,但是它體積比VS小,安裝速度也快。
在這里說(shuō)的是 vc6 在 vista 和 win7 下的安裝問(wèn)題,因?yàn)橹霸诰W(wǎng)上找的說(shuō)的好像都比較亂。
一開始只是聽別人說(shuō),VC++6.0在vista下不兼容,用不了,自己先裝了一下,設(shè)置成 兼容模式&管理員身份運(yùn)行,結(jié)果運(yùn)行就崩潰,還以為真的不行,就沒(méi)有去找傳說(shuō)中可以用的SP6版。
網(wǎng)上搜索一般都是說(shuō)SP6、管理員、兼容什么的,前幾天需要再用VC6,所以就裝了一下。在vista和win7下,安裝時(shí)都會(huì)提示說(shuō)不兼容什么的,直接把不再提示那個(gè)對(duì)話框勾一下,只管安裝就是,vista和win7不一樣的地方在于,vista下需要設(shè)為“管理員身份運(yùn)行”,不能設(shè)置為“兼容模式”,win7下按剛才說(shuō)的,安裝完畢就可以運(yùn)行了。
這個(gè)題目就是找在1~N之間互質(zhì)的三個(gè)正整數(shù)x、y、z,并滿足x^2+y^2=z^2,判斷這樣的數(shù)有多少對(duì),以及跟1~N中與這些互質(zhì)正整數(shù)無(wú)關(guān)的正整數(shù)的個(gè)數(shù)。
其實(shí)比較關(guān)鍵的是對(duì)上面那個(gè)式子 x^2+y^2=z^2 進(jìn)行變形,減少一個(gè)變量為
(r^2-s^2)^2 + (2*r*s)^2 = (r^2+s^2)^2,
這樣只有兩個(gè)變量存在,可以減少一輪循環(huán)。于是題目就變成了找這樣的r和s,當(dāng)r*r + s*s <= n時(shí),
z = r*r + s*s;
y = max(r*r - s*s, 2*r*s);
x = min(r*r - s*s, 2*r*s);
此時(shí),如果x、y、z互質(zhì),滿足條件的正整數(shù)組計(jì)數(shù)就加1,同時(shí)把所有與這些數(shù)相關(guān)的數(shù)組位標(biāo)記為1,
for (i = 1; i*z <= n; i++)
{
flag[i*x] = flag[i*y] = flag[i*z] = 1;
}
輸出第二個(gè)結(jié)果的時(shí)候,即為輸出標(biāo)志數(shù)組中值為0的元素個(gè)數(shù)。
for (i = 1; i <= n; i++)
{
if (!flag[i])/**//*The second number is the number of positive integers <=N that are not part of any triple whose components are all <=N */
num++;
}
雖然在題目中說(shuō)到N最大為1,000,000 ,但是poj測(cè)試數(shù)據(jù)大概在2000內(nèi)。使用2001大小的標(biāo)記數(shù)組就可以過(guò)。
發(fā)現(xiàn)博客是一個(gè)學(xué)習(xí)、交流思想的一個(gè)很好的平臺(tái),以前都在看別人的博客,現(xiàn)在自己也開始寫一下了。