#
#include<iostream>
#include<queue>
#include<functional>
using namespace std;

priority_queue<int,vector<int>,greater<int>>myqueue;

int main ()


{

int n;
int i;
int sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)

{
int temp;
cin>>temp;
myqueue.push(temp);
}
while(myqueue.size()!=1)

{
int temp;
temp=myqueue.top();
sum+=temp;
myqueue.pop();
temp=myqueue.top();
sum+=temp;
myqueue.pop();
myqueue.push(sum);
sum=0;
}
cout<<myqueue.top()<<endl;
system("pause");
return 0;
}
此題與上一題類似,一次AC;
由于控制臺(tái)屏幕太小 這次我將結(jié)果保存在文件中;
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<fstream>
using namespace std;

char mymap[2500][2500];

int leftdot;
int rightdot;
int topdot;
int bottomdot;


void figure(int x,int y,int degree)


{
leftdot=min(leftdot,y);
rightdot=max(rightdot,y);
topdot=min(topdot,x);
bottomdot=max(bottomdot,x);


if(degree==1)

{
mymap[x][y]='X';
}
else

{

int dis=(int)pow((double)3,degree-2)*2;
figure(x,y,degree-1);
figure(x,y+dis,degree-1);
figure(x+dis,y,degree-1);
figure(x+dis/2,y+dis/2,degree-1);
figure(x+dis,y+dis,degree-1);
}



}


int main()


{

int n;
int i,j;
ofstream file;
file.open("test.txt");
while(scanf("%d",&n))

{
rightdot=-100000000;
leftdot=100000000;
topdot=1000000000;
bottomdot=-1000000000;
memset(mymap,' ',sizeof(mymap));
if(n==-1)
break;
figure(1,1,n);
for(i=leftdot;i<=rightdot;i++)

{

for(j=topdot;j<=bottomdot;j++)
file<<mymap[i][j];
file<<endl;
}
file<<'-'<<endl;
}
file.close();
return 0;
}

答案請見:
/Files/abilitytao/test.txt
原題鏈接:http://162.105.81.212/JudgeOnline/problem?id=1941
解題方法:剛開始拿到這道題,我的第一反應(yīng)是要一行一行的輸出,不過做了幾分鐘之后發(fā)現(xiàn):在題述意思下行與行之間似乎沒有規(guī)律可言;
所以這種方法只能作罷;后來看了看discuss,有人提到用遞歸的方法來做這道題,這才恍然大悟:像種大問題嵌套類似之子問題的時(shí)候,遞歸不是最理想的方法么?
開一個(gè)很大的二維矩陣(因?yàn)椴恢繬的最大值有多大,矩陣盡量開大一點(diǎn)可以避免越界),然后給出中間某個(gè)點(diǎn)的坐標(biāo),讓它成為整個(gè)圖形的坐下點(diǎn)坐標(biāo),然后遞歸得“畫出”三個(gè)子圖形(當(dāng)然還要注意一下遞歸出口O(∩_∩)O~),即可;當(dāng)然在不知道這個(gè)題目n的最大值時(shí),我們可以每次畫圖后刷新一邊矩陣,不過為了優(yōu)化速度,我只將n=10的圖形畫出,然后再由點(diǎn)與點(diǎn)之間的關(guān)系,求出各個(gè)參數(shù)的大小即可;
最后輸出,這個(gè)沒什么可說的了。。。
說句題外話,我交題的時(shí)候出現(xiàn)Access denied現(xiàn)
幸好過年的時(shí)候也遇到過同樣情況 用IP地址才可正常訪問 大家注意下:
遇到Access denied的用戶請通過http://162.105.81.212訪問poj
#include<iostream>
#include<cmath>
#include <cstdlib>
using namespace std;
#define MAX 100000000
#define MIN -100000000

char mymap[5000][5000];

int leftdot;
int rightdot;
int topdot;
int bottomdot;

void figure(int x,int y,int deep)


{

if(deep==1)

{

mymap[x][y]='/';
mymap[x][y+1]='_';
mymap[x][y+2]='_';
mymap[x][y+3]='\\';
mymap[x-1][y+1]='/';
mymap[x-1][y+2]='\\';
}
else

{
int dis=(int)pow((double)2,deep);
figure(x,y,deep-1);
figure(x,y+dis,deep-1);
figure(x-dis/2,y+dis/2,deep-1);
}
}


int main ()


{

int n;
int i,j;
leftdot=MAX;
rightdot=MIN;
topdot=MAX;
bottomdot=MIN;
memset(mymap,' ',sizeof(mymap));
figure(2500,2500,10);
while(scanf("%d",&n))

{

if(n==0)
break;

topdot=2500-(int)pow((double)2,10)+1;
bottomdot=topdot+(int)pow((double)2,n)-1;
leftdot=2500+(int)pow((double)2,10)-(int)pow((double)2,n);
rightdot=leftdot+(int)pow((double)2,n+1)-1;
for(i=topdot;i<=bottomdot;i++)

{

for(j=leftdot;j<=rightdot;j++)

{

printf("%c",mymap[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
system("pause");
}


#include<iostream>
using namespace std;



struct node
{
int a;
char b;
};

int main ()


{
cout<<sizeof(node)<<endl;
system("pause");
return 0;

}

這段代碼運(yùn)行后 您認(rèn)為應(yīng)該輸出幾呢?
上課的時(shí)候老師突然提出了這樣一個(gè)問題,當(dāng)時(shí)我想都沒想 直接回答了 5。
呵呵 答案當(dāng)然是錯(cuò)的 現(xiàn)在來運(yùn)行一下這個(gè)程序 發(fā)現(xiàn)這個(gè)程序的結(jié)果是8;
PS:感謝樓下兩位朋友的提問 讓問題變得更有意思了 內(nèi)部原理究竟是怎樣的呢?希望知道的朋友能夠予以解答
我在這里僅給出一些測試現(xiàn)象
struct node
{
};
輸出為1
struct node
{
char a;
};
輸出為1
struct node
{
int a;
double b;
};
輸出為16
struct node
{
char a;
char b;
char c;
char d;
char e;
}
輸出為5

/**//*bsearch函數(shù)聲明如下:

void *bsearch(const void *key, const void *base, size_t *nelem,
size_t width, int(*fcmp)(const void *, const *));

參數(shù)的意思和qsort的差不多,區(qū)別在于:
1. qsort用來排序,bsearch用二分法來查找元素
2. bsearch中的base必須是升序排列的數(shù)組!!!
3. 如果數(shù)組里有重復(fù)的答案,則bsearch會(huì)返回其中一個(gè)的地址 (具體返回哪一個(gè)不確定)
4. bsearch有五個(gè)自變量,第一個(gè)是要找的東西,剩下的跟qsort一模一樣
5. bsearch如果沒找到所求則回傳NULL ,否則回傳該元素被找到的地址(void *) */



#include<iostream>
#include<cstdlib>
using namespace std;


int compare(const void*a,const void *b)


{
return *((int*)a)-*((int*)b);
}


int main()



{
int a[100];
int i;
for(i=0;i<100;i++)
a[i]=i+1;
i=50;
int *result;
result=(int*)bsearch((void*)&i,(void*)a,100,sizeof(a[0]),compare);
cout<<i<<' '<<*result<<endl;
system("pause");
return 0;
}

值得特別注意的是:函數(shù)的第一個(gè)元素是一個(gè)地址變量,而不是一個(gè)int型或者是float型的變量。
C++標(biāo)準(zhǔn)庫的所有頭文件都沒有擴(kuò)展名。C++標(biāo)準(zhǔn)庫的內(nèi)容總共在50個(gè)標(biāo)準(zhǔn)頭文件中定義,其中18個(gè)提供了C庫的功能。 <cname>形式的標(biāo)準(zhǔn)頭文件【 <complex>例外】其內(nèi)容與ISO標(biāo)準(zhǔn)C包含的name.h頭文件相同,但容納了C++擴(kuò)展的功能。在 <cname>形式標(biāo)準(zhǔn)的頭文件中,與宏相關(guān)的名稱在全局作用域中定義,其他名稱在std命名空間中聲明。在C++中還可以使用name.h形式的標(biāo)準(zhǔn)C庫頭文件名。
C++標(biāo)準(zhǔn)庫的內(nèi)容分為10類:
C1.語言支持 C2.輸入/輸出 C3.診斷 C4.一般工具 C5.字符串
C6.容器 C7.迭代器支持 C8.算法 C9.數(shù)值操作 C10.本地化
C1 標(biāo)準(zhǔn)庫中與語言支持功能相關(guān)的頭文件 頭文件 描述
<cstddef> 定義宏NULL和offsetof,以及其他標(biāo)準(zhǔn)類型size_t和ptrdiff_t。與對應(yīng)的標(biāo)準(zhǔn)C頭文件的區(qū)別是,NULL是C++空指針常量的補(bǔ)充定義,宏offsetof接受結(jié)構(gòu)或者聯(lián)合類型參數(shù),只要他們沒有成員指針類型的非靜態(tài)成員即可。
<limits> 提供與基本數(shù)據(jù)類型相關(guān)的定義。例如,對于每個(gè)數(shù)值數(shù)據(jù)類型,它定義了可以表示出來的最大值和最小值以及二進(jìn)制數(shù)字的位數(shù)。
<climits> 提供與基本整數(shù)數(shù)據(jù)類型相關(guān)的C樣式定義。這些信息的C++樣式定義在 <limits>中
<cfloat> 提供與基本浮點(diǎn)型數(shù)據(jù)類型相關(guān)的C樣式定義。這些信息的C++樣式定義在 <limits>中
<cstdlib> 提供支持程序啟動(dòng)和終止的宏和函數(shù)。這個(gè)頭文件還聲明了許多其他雜項(xiàng)函數(shù),例如搜索和排序函數(shù),從字符串轉(zhuǎn)換為數(shù)值等函數(shù)。它與對應(yīng)的標(biāo)準(zhǔn)C頭文件stdlib.h不同,定義了abort(void)。abort()函數(shù)還有額外的功能,它不為靜態(tài)或自動(dòng)對象調(diào)用析構(gòu)函數(shù),也不調(diào)用傳給atexit()函數(shù)的函數(shù)。它還定義了exit()函數(shù)的額外功能,可以釋放靜態(tài)對象,以注冊的逆序調(diào)用用atexit()注冊的函數(shù)。清除并關(guān)閉所有打開的C流,把控制權(quán)返回給主機(jī)環(huán)境。
<new> 支持動(dòng)態(tài)內(nèi)存分配
<typeinfo> 支持變量在運(yùn)行期間的類型標(biāo)識(shí)
<exception> 支持異常處理,這是處理程序中可能發(fā)生的錯(cuò)誤的一種方式
<cstdarg> 支持接受數(shù)量可變的參數(shù)的函數(shù)。即在調(diào)用函數(shù)時(shí),可以給函數(shù)傳送數(shù)量不等的數(shù)據(jù)項(xiàng)。它定義了宏va_arg、va_end、va_start以及va_list類型
<csetjmp> 為C樣式的非本地跳躍提供函數(shù)。這些函數(shù)在C++中不常用
<csignal> 為中斷處理提供C樣式支持
C2 支持流輸入/輸出的頭文件 頭文件 描述
< iostream> 支持標(biāo)準(zhǔn)流cin、cout、cerr和clog的輸入和輸出,它還支持多字節(jié)字符標(biāo)準(zhǔn)流wcin、wcout、wcerr和wclog。
<iomanip> 提供操縱程序,允許改變流的狀態(tài),從而改變輸出的格式。
<ios> 定義iostream的基類
<istream> 為管理輸出流緩存區(qū)的輸入定義模板類
<ostream> 為管理輸出流緩存區(qū)的輸出定義模板類
<sstream> 支持字符串的流輸入輸出
<fstream> 支持文件的流輸入輸出
<iosfwd> 為輸入輸出對象提供向前的聲明
<streambuf> 支持流輸入和輸出的緩存
<cstdio> 為標(biāo)準(zhǔn)流提供C樣式的輸入和輸出
<cwchar> 支持多字節(jié)字符的C樣式輸入輸出
C3 與診斷功能相關(guān)的頭文件 頭文件 描述
<stdexcept> 定義標(biāo)準(zhǔn)異常。異常是處理錯(cuò)誤的方式
<cassert> 定義斷言宏,用于檢查運(yùn)行期間的情形
<cerrno> 支持C樣式的錯(cuò)誤信息
C4 定義工具函數(shù)的頭文件 頭文件 描述
<utility> 定義重載的關(guān)系運(yùn)算符,簡化關(guān)系運(yùn)算符的寫入,它還定義了pair類型,該類型是一種模板類型,可以存儲(chǔ)一對值。這些功能在庫的其他地方使用
<functional> 定義了許多函數(shù)對象類型和支持函數(shù)對象的功能,函數(shù)對象是支持operator()()函數(shù)調(diào)用運(yùn)算符的任意對象
<memory> 給容器、管理內(nèi)存的函數(shù)和auto_ptr模板類定義標(biāo)準(zhǔn)內(nèi)存分配器
<ctime> 支持系統(tǒng)時(shí)鐘函數(shù)
C5 支持字符串處理的頭文件 頭文件 描述
<string> 為字符串類型提供支持和定義,包括單字節(jié)字符串(由char組成)的string和多字節(jié)字符串(由wchar_t組成)
<cctype> 單字節(jié)字符類別
<cwctype> 多字節(jié)字符類別
<cstring> 為處理非空字節(jié)序列和內(nèi)存塊提供函數(shù)。這不同于對應(yīng)的標(biāo)準(zhǔn)C庫頭文件,幾個(gè)C樣式字符串的一般C庫函數(shù)被返回值為const和非const的函數(shù)對替代了
<cwchar> 為處理、執(zhí)行I/O和轉(zhuǎn)換多字節(jié)字符序列提供函數(shù),這不同于對應(yīng)的標(biāo)準(zhǔn)C庫頭文件,幾個(gè)多字節(jié)C樣式字符串操作的一般C庫函數(shù)被返回值為const和非const的函數(shù)對替代了。
<cstdlib> 為把單字節(jié)字符串轉(zhuǎn)換為數(shù)值、在多字節(jié)字符和多字節(jié)字符串之間轉(zhuǎn)換提供函數(shù)
C6 定義容器類的模板的頭文件 頭文件 描述
<vector> 定義vector序列模板,這是一個(gè)大小可以重新設(shè)置的數(shù)組類型,比普通數(shù)組更安全、更靈活
<list> 定義list序列模板,這是一個(gè)序列的鏈表,常常在任意位置插入和刪除元素
<deque> 定義deque序列模板,支持在開始和結(jié)尾的高效插入和刪除操作
<queue> 為隊(duì)列(先進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)定義序列適配器queue和priority_queue
<stack> 為堆棧(后進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)定義序列適配器stack
<map> map是一個(gè)關(guān)聯(lián)容器類型,允許根據(jù)鍵值是唯一的,且按照升序存儲(chǔ)。multimap類似于map,但鍵不是唯一的。
<set> set是一個(gè)關(guān)聯(lián)容器類型,用于以升序方式存儲(chǔ)唯一值。multiset類似于set,但是值不必是唯一的。
<bitset> 為固定長度的位序列定義bitset模板,它可以看作固定長度的緊湊型bool數(shù)組
C7 支持迭代器的頭文件 頭文件 描述
<iterator> 給迭代器提供定義和支持
C8 有關(guān)算法的頭文件 頭文件 描述
<algorithm> 提供一組基于算法的函數(shù),包括置換、排序、合并和搜索
<cstdlib> 聲明C標(biāo)準(zhǔn)庫函數(shù)bsearch()和qsort(),進(jìn)行搜索和排序
<ciso646> 允許在代碼中使用and代替&&
C9 有關(guān)數(shù)值操作的頭文件 頭文件 描述
<complex> 支持復(fù)雜數(shù)值的定義和操作
<valarray> 支持?jǐn)?shù)值矢量的操作
<numeric> 在數(shù)值序列上定義一組一般數(shù)學(xué)操作,例如accumulate和inner_product
<cmath> 這是C數(shù)學(xué)庫,其中還附加了重載函數(shù),以支持C++約定
<cstdlib> 提供的函數(shù)可以提取整數(shù)的絕對值,對整數(shù)進(jìn)行取余數(shù)操作
C10 有關(guān)本地化的頭文件 頭文件 描述
<locale> 提供的本地化包括字符類別、排序序列以及貨幣和日期表示。
<clocale> 對本地化提供C樣式支持
摘要: 對Rss客戶端訂閱的朋友表示歉意。
閱讀全文