2017.12.8

PAT 甲級1001. A+B Format (20)Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).InputEach input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.OutputFor each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.Sample Input-1000000 9Sample Output-999,991題解:#include<iostream>using namespace std;int main(){ int a,b; cin>>a>>b; int c=a+b; string s=to_string(c); len=s.length(); for (int i=0;i<len;i++){ cout<<s[i]; if(s[i]==-) continue; else{ if((i+1)%3==len%3&&i!=len-1) cout<<","; } }}

PAT 乙級1015 德才論(25宋代史學家司馬光在《資治通鑒》中有一段著名的「德才論」:「是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。」現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。輸入格式:輸入第1行給出3個正整數,分別為:N<=105),即考生總數;L>=60),為錄取最低分數線,即德分和才分均不低於L的考生才有資格被考慮錄取;H<100),為優先錄取線——德分和才分均不低於此線的被定義為「才德全盡」,此類考生按德才總分從高到低排序;才分不到但德分到線的一類考生屬於「德勝才」,也按總分排序,但排在第一類考生之後;德才分均低於H,但是德分不低於才分的考生屬於「才德兼亡」但尚有「德勝才」者,按總分排序,但排在第二類考生之後;其他達到最低線L的考生也按總分排序,但排在第三類考生之後。隨後N行,每行給出一位考生的信息,包括:准考證號、德分、才分,其中准考證號為8位整數,德才分為區間[0, 100]內的整數。數字間以空格分隔。輸出格式:輸出第1行首先給出達到最低分數線的考生人數M,隨後M行,每行按照輸入格式輸出一位考生的信息,考生按輸入中說明的規則從高到低排序。當某類考生中有多人總分相同時,按其德分降序排列;若德分也並列,則按准考證號的升序輸出。題解//好好讀題,覺得才>德的人好像有點虧//因為本質上有三個排序維度otz就很麻煩qwq所以遞歸就沒法寫,所以用最簡單的氣泡排序 #include <iostream>#include <vector>#include <algorithm>using namespace std;typedef struct{ int id; int vir; int abi; }stu; bool Cmp(stu a,stu b){ if(a.vir+a.abi!=b.vir+b.abi) return a.vir+a.abi>b.vir+b.abi; else { if(a.vir!=b.vir) return a.vir>b.vir; else return a.id<b.id; }}vector<stu> Stu1;vector<stu> Stu2;vector<stu> Stu3;vector<stu> Stu4;int main(){ int N,L,H; scanf("%d%d%d",&N,&L,&H); stu Stu; int count=0; for(int i=0;i<N;++i) { scanf("%d%d%d",&Stu.id,&Stu.vir,&Stu.abi); if(Stu.vir>=L&&Stu.abi>=L) { ++count; if(Stu.vir>=H&&Stu.abi>=H) Stu1.push_back(Stu); else if(Stu.vir>=H&&Stu.abi<H) Stu2.push_back(Stu); else if(Stu.vir>=Stu.abi) Stu3.push_back(Stu); else Stu4.push_back(Stu); } } sort(Stu1.begin(),Stu1.end(),Cmp); sort(Stu2.begin(),Stu2.end(),Cmp); sort(Stu3.begin(),Stu3.end(),Cmp); sort(Stu4.begin(),Stu4.end(),Cmp); printf("%d
",count); vector<stu>::iterator iter; for(iter=Stu1.begin();iter!=Stu1.end();iter++) printf("%d %d %d
",iter->id,iter->vir,iter->abi); for(iter=Stu2.begin();iter!=Stu2.end();iter++) printf("%d %d %d
",iter->id,iter->vir,iter->abi); for(iter=Stu3.begin();iter!=Stu3.end();iter++) printf("%d %d %d
",iter->id,iter->vir,iter->abi); for(iter=Stu4.begin();iter!=Stu4.end();iter++) printf("%d %d %d
",iter->id,iter->vir,iter->abi); return 0; }

PAT 乙級1016 部分A+B正整數A的「DA(為1位整數)部分」定義為由A中所有DA組成的新整數PA。例如:給定A = 3862767DA = 6,則A的「6部分」PA66,因為A中有26現給定ADABDB,請編寫程序計算PA + PB輸入格式:輸入在一行中依次給出ADABDB,中間以空格分隔,其中0 < A, B < 1010題解:#include <iostream>using namespace std;int main(){ int data1,data2,d1,d2; int i=0,j=0; int p1=0,p2=0; int a[11],b[11]; scanf("%d%d%d%d",&data1,&d1,&data2,&d2); while(data1!=0) { a[i]=data1%10; data1/=10; i++; } for(--i;i>=0;--i) { if(a[i]==d1) p1=a[i]+p1*10; } while(data2!=0) { b[j]=data2%10; data2/=10; j++; } for(--j;j>=0;--j) { if(b[j]==d2) p2=b[j]+p2*10; } printf("%d
",p1+p2); return 0;}

PAT 乙級1017 A除以B本題要求計算A/B,其中A是不超過1000位的正整數,B是1位正整數。你需要輸出商數Q和餘數R,使得A = B * Q + R成立。輸入格式:輸入在1行中依次給出A和B,中間以1空格分隔。題解:#include <iostream>#include <cstring>using namespace std;int main(){ string A,Q; int B,R=0; cin>>A>>B; int len=A.length(); int temp=A[0]-0; if(temp>=B) Q.push_back(temp/B+0); for(int i=1;i<len;i++) { R=temp%B; temp=R*10+A[i]-0; Q.push_back(temp/B+0); } R=temp%B; if(len==1&&A[0]-0<B) cout<<"0"<<" "<<A[0]-0; else cout<<Q<<" "<<R; return 0;}

推薦閱讀:

Leetcode每天兩題6-第11題和第42題
遊戲開發與程序設計知識總結03——演算法
Leetcode之旅|Morris 後序遍歷
刷題的日常Day2--斐波那契數列
學點演算法之棧的學習與應用

TAG:演算法與數據結構 |