北理工計算機復試上機 2013
阿新 • • 發佈:2018-02-18
void 輾轉相除法 emp console urn div ios cout ...
1. 求兩個數的最大公約數(似乎有個輾轉相除法,為什麽不用呢,沒錯,我不會)
示例:
輸入:24,18
輸出:6
1 // 2013_1.cpp : Defines the entry point for the console application. 2 // 3 #include<iostream> 4 using namespace std; 5 6 int main(int argc, char* argv[]) 7 { 8 int a,b; 9 cout<<"輸入:"; 10 cin>>a>>b;11 int max=a>b?b:a;//返回兩個數中最小的那個 12 int result=0; 13 for(int i=1;i<=max;++i){ 14 if(a%i==0&&b%i==0){ 15 result=i; 16 } 17 } 18 cout<<"輸出:"<<result<<endl; 19 return 0; 20 }
2.輸入一組英文單詞,按字典順序(不區分大小寫)排序輸出。(這個是在網上抄的,不會。。)
示例:
輸入:Information Info Inform info Suite suite suit
輸出:Info info Inform Information suit Suite suite
1 // 2013_2.cpp : Defines the entry point for the console application. 2 // 3 4 #include <iostream> 5 #include<algorithm> 6 #include<vector> 7 #include<string> 8 using namespace std; 9 10 bool de(string a ,string b){11 if(a[0]>=‘A‘&&a[0]<=‘Z‘) 12 a[0]=a[0]+32; 13 if(b[0]>=‘A‘&&b[0]<=‘Z‘) 14 b[0]=b[0]+32; 15 return (a<b); 16 } 17 18 int main(int argc, char* argv[]) 19 { 20 vector<string> str; 21 string s; 22 while(1){ 23 cout<<"請輸入,00結束"<<endl; 24 while(cin>>s){ 25 if(s=="00")break; 26 str.push_back(s); 27 } 28 sort(str.begin(),str.end(),de); 29 vector<string>::iterator i; 30 for(i=str.begin();i!=str.end();i++) 31 cout<<*i<<" "; 32 cout<<endl; 33 } 34 return 0; 35 }
3. 輸入表達式,輸出表達式先序遍歷結果(沒錯,又是抄的)
示例:
輸入:a+b*(c-d)-e/f
輸出:-+a*b-cd/ef
1 #include<iostream> 2 #include<stack> 3 #include<string> 4 using namespace std; 5 typedef struct no 6 { 7 char data; 8 struct no *lchild,*rchild; 9 }*node; 10 int getpr(char a) 11 { 12 if(a==‘+‘||a==‘-‘)return 1; 13 if(a==‘*‘||a==‘/‘)return 2; 14 if(a==‘(‘||a==‘)‘)return 0; 15 }//優先級 16 string res(string in) 17 { 18 stack<char> st; 19 string post=""; 20 for(int i=0; i<in.length(); i++) 21 { 22 if(in[i]==‘+‘||in[i]==‘-‘||in[i]==‘*‘||in[i]==‘/‘) 23 { 24 if(!st.empty()) 25 { 26 if(getpr(in[i])>getpr(st.top())) 27 st.push(in[i]); 28 else 29 { 30 while(getpr(in[i])<=getpr(st.top())) 31 { 32 if(getpr(in[i])>getpr(st.top())) break; 33 post+=st.top(); 34 st.pop(); 35 if(st.empty()) break; 36 } 37 st.push(in[i]); 38 }//棧不空 39 }//if 是操作符不空 40 41 if(st.empty()) st.push(in[i]); 42 }//if 是操作符 43 44 if(in[i]==‘(‘) st.push(in[i]); 45 if(in[i]==‘)‘) 46 { 47 while(st.top()!=‘(‘) 48 { 49 if(st.top()==‘(‘)break; //是) 50 post+=st.top(); 51 st.pop(); 52 } 53 st.pop(); 54 } 55 if(in[i]!=‘+‘&&in[i]!=‘-‘&&in[i]!=‘/‘&&in[i]!=‘*‘&&in[i]!=‘(‘&&in[i]!=‘)‘) 56 post+=in[i]; 57 }// for(int i=0;i<in.length();i++) 58 while(!st.empty()) 59 { 60 post+=st.top(); 61 st.pop(); 62 } 63 return post; 64 }//res 65 node create(string sa) 66 { 67 node ss; 68 stack<node>st; 69 for(int i=0; i<sa.length(); i++) 70 { 71 if(sa[i]!=‘+‘&&sa[i]!=‘-‘&&sa[i]!=‘/‘&&sa[i]!=‘*‘) 72 { 73 ss=new no(),ss->data=sa[i]; 74 ss->lchild=ss->rchild=NULL; 75 st.push(ss); 76 } 77 else 78 { 79 ss=new no(),ss->data=sa[i]; 80 ss->rchild=st.top(); 81 st.pop(); 82 ss->lchild=st.top(); 83 st.pop(); 84 st.push(ss); 85 } 86 }//for 87 return st.top(); 88 } 89 void pre(node sa) 90 { 91 if(sa!=NULL) 92 { 93 cout<<sa->data; 94 pre(sa->lchild); 95 pre(sa->rchild); 96 } 97 } 98 main() 99 { 100 cout<<"請輸入中綴表達式:"<<endl; 101 string in,post; 102 node head; 103 head=new no(); 104 cin>>in; 105 cout<<"轉換為後綴表達式為:"<<endl; 106 post=res(in); 107 cout<<post<<endl; 108 cout<<"構建表達式樹......"<<endl; 109 head=create(post); 110 cout<<"這顆表達式樹的前序(前綴表達式)為: "<<endl; 111 pre(head); 112 cout<<endl; 113 }
北理工計算機復試上機 2013