A題進行時 浙大PAT 1011 1020

2022-08-11 22:27:14 字數 4406 閱讀 3145

1011

1 #include2 #include34

intmain()

1920

for(i=0;i<3;i++)

26else

if(t[i]>l[i])

30else34}

35 sum=(x[0]*x[1]*x[2]*0.65-1)*2

;36 printf("

%c %c %c %.2f

",a[0],a[1],a[2

],sum);

37return0;

38 }

也是非常簡單的一道題,沒什麼好說的

1012(重要!!)

1 #include2 #include

3 #include4 #include5

using

namespace

std;

6struct

stu;

15bool

cmpbya(stu a,stu b)

18bool

cmpbyc(stu a,stu b)

21bool

cmpbym(stu a,stu b)

24bool

cmpbye(stu a,stu b)

27int

main()

41 score=-1

;42 r=0;43

sort(v.begin(),v.end(),cmpbya);

44for(i=0;i)

51sort(v.begin(),v.end(),cmpbyc);

52for(i=0;i)60}

61sort(v.begin(),v.end(),cmpbym);

62for(i=0;i)70}

71sort(v.begin(),v.end(),cmpbye);

72for(i=0;i)80}

81for(i=0;i)

88else

if(t!=v[j].id&&j==n1-1

)89 printf("

n/a\n");

90}91}

92return0;

93 }

教科書一般的**,從這個

**可以學到很多:

c++中vector容器的應用,使用此容器,直接將結構體裝入容器內,直接利用vector本身的函式就可以非常方便的進行排序、計算大小等。

注意排名時候的名詞並列的情況,本程式提供了乙個非常優秀的處理方案,一定要學會使用。

1014

1 #include2 #include

3 #include4 #include5

using

namespace

std;

67 vector v[25];8

int t[1005];9

int cend[1005

];10

intn,m,k,q;

11int

main()

20 scanf("

%d%d%d%d

",&n,&m,&k,&q);

21for(i=1;i<=k;i++)

24 j=0;25

for(i=1;i<=n*m;i++)

3233

for(i=n*m+1;i<=k;i++)40}

41 cend[i]=cend[v[s].back()]+t[i];

4243

v[s].erase(v[s].begin());

44v[s].push_back(i);45}

46for(i=0;i)52}

53return0;

54 }

利用上次學會的vector容器可以非常方便的解決這個問題。本質就是乙個佇列問題。

剛開始還是沒有思路,雖然知道是個佇列但是無法下手,後來參考大神的**明白了要將整個隊伍分成兩部分考慮,一部分是黃線內的,他們的時間可以直接根據隊伍確定,另一部分是黃線外,就必須要通過佇列的出入時間來確定。理清這個思路,**就其實比較容易實現。

提交的時候遇到了幾個問題,乙個是我的變數命名,不要和vector方法重名,比如說end,以後**中要注意;另乙個是這道題的乙個細節,之前沒有把題意弄清,一定要注意最後的判斷條件,本題容易出錯的地方:是在17:00及以後開始服務的客戶輸出"sorry",而不是17:00之前結束服務的輸出"sorry";如客戶cid是16:59開始服務,服務時間為2,則輸出的應該是17:01,而不是"sorry"。這些都查好改過以後,就ac了。

1015

1 #include2 #include

3 #include4

bool isp(intx)5

15return

true;16

}17intmain()

35 k=1;36

for(i=strlen(r)-1;i>=0;i--)

40if

(isp(sum))

41 printf("

yes\n");

42else

43 printf("

no\n");

44}45else

46 printf("

no\n");

4748}49

return0;

50 }

還算是自己有思路的一道題,基本不用任何參考自己做了出來,就是有點小問題,一定要注意到原來的數字也要是質數!

還有對於質數的判斷,這道題的方法就作為參考,以後的質數都這樣來判斷。

我自己的方法是將每一位都轉化為為字串來處理,還算是比較簡單。

還有一種比較好的(高階)方法是利用佇列,關鍵**如下:

1

if(isprime(n))29

int reverse=0;10

while(!q.empty())

1116

if(isprime(reverse))

1720

else

21

其實吧。。思路都一樣

1019

1 #include2 #include34

intmain()

13 //memset(c,'

\0',sizeof

(c));

14 i=0;15

while(n!=0)20

int l=i;

21int flag=1;22

for(i=0,j=l-1;i)27}

28if(flag==0

)29 printf("

no\n");

30else

31 printf("

yes\n");

32for(i=l-1;i>=0;i--)

33 printf(i==0?"

%d\n

":"%d

",c[i]);

3435

return0;

36 }

其實是一道很簡單的題,關鍵就是十進位制的轉換。轉換之後的儲存。利用最簡單的int陣列就可以了,完全不需要其他容器或是我自己用的char陣列的輔助就可以解決。希望給自己乙個啟示,以後不要把這種題目給複雜化了。

還有一點是這種對稱的題的判斷,從兩頭一起移動判斷最合適,結束條件為i1020

1 #include2 #include

3 #include4 #include5 #include6

using

namespace

std;

7struct

node;

12 queueq;

13 vectorv;

14 node* buildtree(int *a,int *b,int

n)25 root->left=buildtree(a,b,i);

26 root->right=buildtree(a+i,b+i+1,n-i-1

);27

return

root;28}

29void levelorder(node *tree)38}

39int

main()

53return0;

54 }

第一次接觸樹的題目,這是乙個很經典的題目。包括了樹的結構體的定義、樹的生成、利用容器實現各種遍歷、遞迴演算法的實現。最關鍵的是遍歷的轉換,利用兩個遍歷還原整個二叉樹(其中必須有乙個是中序遍歷)作為乙個經典的題目,一定要利用這個題開啟樹類題目的思路。

PAT1 馬虎算式(暴力 dfs)

小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是 36 x 495 他卻給抄成了 396 x 45 但結果卻很戲劇性,他的答案竟然是對的!因為 36 495 396 45 17820 類似這樣的巧合情況可能還有很多,比如 27 594 297 54 假設 a b ...

1048 數字加密 20 浙大PAT乙級真題

1048.數字加密 20 本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個...

1033 舊鍵盤打字 20 浙大PAT乙級真題

舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及壞掉的那些鍵,打出的結果文字會是怎樣?輸入格式 輸入在2行中分別給出壞掉的那些鍵 以及應該輸入的文字。其中對應英文本母的壞鍵以大寫給出 每段文字是不超過105個字元的串。可用的字元包括字母 a z,a ...