1011
1 #include2 #include34intmain()
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 #include3 #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 #include3 #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 #include3 #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 }
還算是自己有思路的一道題,基本不用任何參考自己做了出來,就是有點小問題,一定要注意到原來的數字也要是質數!
還有對於質數的判斷,這道題的方法就作為參考,以後的質數都這樣來判斷。
我自己的方法是將每一位都轉化為為字串來處理,還算是比較簡單。
還有一種比較好的(高階)方法是利用佇列,關鍵**如下:
1if(isprime(n))29
int reverse=0;10
while(!q.empty())
1116
if(isprime(reverse))
1720
else
21
其實吧。。思路都一樣
1019
1 #include2 #include34intmain()
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 #include3 #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 ...